Pergunta

Eu tenho uma forma html com vários campos de texto.

Quando tento enviar não caracteres Inglês (russo no meu caso) servidor é recebida string "ilegível" (não perguntas - "???" mas alguns caracteres estranhos).

Eu simplificada meu código para mostrá-lo aqui:

<%@ 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>

Como devo corrigir isso?

Foi útil?

Solução

Tomcat usa ISO-8859-1 como a codificação de caracteres padrão para parâmetros de URL, independentemente da codificação da página que contém o URL. Isto pode ser alterado com o atributo "URIEncoding" em seu conector configuração. Outros servidores de aplicativos podem ter configurações semelhantes.

este artigo abrange muitos problemas encontrados quando se trabalha com JSP.

Outras dicas

Erickson explicou isso muito bem nesta página. Uma solução independente do servidor é usar um filtro de codificação de caracteres, à la org.springframework.web.filter.CharacterEncodingFilter. Veja o exemplo abaixo:

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
    }
}

Em web.xml adicionar a declaração de filtro e o mapeamento url filtro nas seções apropriadas:

  <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>

Ao usar POST - que é uma obrigação tu uso de codificação - o formulário é enviado como Content-Type "application / x-www-form-urlencoded". Você pode especificar o atributo formulário aceitar-charset = "UTF-8" para especificar a codificação.

Este é o mesmo que Victor Ionescu proposto, mas você não precisa escrever seu próprio filtro de codificação.

Adicione o seguinte 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top