Encoding hell

2 respostas
plentz

Opa pessoal,

To com um problema muitoooo safado. Converti a aplicação aqui para UTF-8 (antes era uma lambança de ISO-8859-1 misturado com UTF-8 ). O problema basicamente é o seguinte, na minha máquina(MacOSX) eu rodo sem problema algum no jetty dentro do Eclipse. No servidor, quando mando salvar algo no banco, a acentuação do registro fica zuado (postgres configurado também em UTF-8 ). O problema é somente quando o dado vai para o banco - no servidor, pois em um formulário de pesquisa por exemplo, ele fica ok entre diferente requests.

Outra coisa, quando o registro está correto no banco(quando gravei a partir da minha máquina, por exemplo) ele exibe correto em todas páginas no servidor. O problema aparentemente é só quando faço update/insert a partir do servidor

Alguém tem IDÉIA do que possa ser?

PS: Tanto no Eclipse quanto no servidor, o resultado é o mesmo

System.out.println(System.getProperty("file.encoding")); // UTF-8 System.out.println(new java.io.OutputStreamWriter(new java.io.ByteArrayOutputStream()).getEncoding()); // UTF-8 System.out.println(java.nio.charset.Charset.defaultCharset().name()); // UTF-8

PS2: Já revisei TUDO e não tem mais nenhuma referência a ISO-8859-1
PS3: No servidor também está no env LANG=en_US.UTF-8

2 Respostas

plentz

Problema resolvido (dica do Sérgio Lopes). Foi necessário criar um filter e setar o encoding de cada requisição

public void doFilter(ServletRequest req, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
	HttpServletRequest request = (HttpServletRequest) req;
	request.setCharacterEncoding("UTF-8");
}
e no web.xml
<filter>
		<filter-name>EncodingFilter</filter-name>
		<filter-class>br.com.guj.EncodingFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
plentz

Mais 2 coisas importantes:

  • também é interessante setar o encoding do response
response.setCharacterEncoding("UTF-8");
  • dependendo do seu application server, talvez seja necessário setar o encoding no ContentType(principalmente para javascript)

if(requestedURI.endsWith(".js")) { response.setContentType("text/javascript; charset=UTF-8"); }

Criado 12 de junho de 2009
Ultima resposta 14 de jun. de 2009
Respostas 2
Participantes 1