Pregunta

Tengo un html-formulario con varios campos de texto.

Cuando intento enviar caracteres no ingleses (en ruso en mi caso) del servidor se recibe cadena "ilegible" (no preguntas - "???", pero algunos caracteres extraños).

He simplificado mi código para mostrar aquí:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head><title>Simple jsp page</title></head>
  <body>
    <c:out value="${param.rustext}"/>
    <form action="/test" method="post">
        <input type="text" name="rustext" width="30">
        <input type="submit" value="Submit">
    </form>
  </body>
</html>

¿Cómo debo arreglar eso?

¿Fue útil?

Solución

Tomcat utiliza ISO-8859-1 como la codificación de caracteres por defecto para los parámetros de URL, independientemente de la codificación de la página que contiene la URL. Esto se puede cambiar con el "URIEncoding" atributo en su conector configuración. Otros servidores de aplicaciones pueden tener una configuración similar.

este artículo abarca muchos problemas más frecuentes cuando se trabaja con JSP.

Otros consejos

Erickson explica esto muy bien en esta página. Una solución independiente del servidor es utilizar un filtro de codificación de caracteres, a la org.springframework.web.filter.CharacterEncodingFilter. Consulte el siguiente ejemplo:

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {
    private String encoding = "utf-8";
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain filterChain) throws IOException, ServletException {
        request.setCharacterEncoding(encoding);
        filterChain.doFilter(request, response);
    }
    public void init(FilterConfig filterConfig) throws ServletException {
        String encodingParam = filterConfig.getInitParameter("encoding");
        if (encodingParam != null) {
            encoding = encodingParam;
        }
    }
    public void destroy() {
        // nothing todo
    }
}

En Web.xml añadir la declaración de filtro y el filtro de correlación de URL en las secciones correspondientes:

  <filter>
  <filter-name>EncodingFilter</filter-name>
  <description>
    <![CDATA[Changes the encoding of the request, in order to help the appserver to correctly interpret request params]]>
  </description>
  <filter-class>com.mypackage.EncodingFilter</filter-class>  
 <init-param>
    <param-name>encoding</param-name>
    <param-value>ISO-8859-15</param-value>
  </init-param>   
</filter>


  <filter-mapping>
      <filter-name>EncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

Cuando se utiliza la POST - que es una necesidad tu utilizar codificación - la forma es enviar como de tipo de contenido "-urlencoded x-www-formulario de solicitud /". Es posible especificar la forma-atributo accept-charset = "UTF-8" para especificar su codificación.

Esto es lo mismo que Victor Ionescu propuso, pero no es necesario para escribir su propio filtro de codificación.

Agregue el siguiente filtro para web.xml

<filter>
    <filter-name>charsetFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>charsetFilter</filter-name>
    <url-pattern>*.admin</url-pattern>
</filter-mapping>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top