Problemas com Encoding

3 respostas
Rafael_Steil

Estou levando uma certa surra ao mexer com encoding das paginas html. Apos ter lido http://www.guj.com.br/forum/viewtopic.php?t=12456 e http://www.guj.com.br/forum/viewtopic.php?t=11166, realizei alguns testes, mas sempre encontrei algum caso onde ocorria problemas com encoding.

Primeiramente, configurei tudo pra usar UTF-8… desde o content-type do responde, meta tag do html, charset to form, encoding do request, file.encoding da VM, encoding do banco de dados ( mysql, que apesar de dizerem que o db em si ainda nao suporta direito, reza a lenda que o driver jdbc faz umas mutretas )

O fato eh que, qdo deixo tudo em UTF, os caracteres prbr, acentuados, ficam cheio de ??? (e, pensando bem, ate os caracteres cirilicos ). Eu consegui gravar corretamente os caracteres cirilicos quando usei iso, mas do meu ponto de vista leigo nao tem mta logica.

Pelo que entendi ainda, ha o problema do endoding do browser do usuario. Digo, o meu navegador pode usar por padrao um encdoding totalmente diferente do usado nos navegadores russos, o que faz com que parte dos usuarios visualizem o conteudo corretamente, e outra parte nao.

Fiz um teste basatnte simples:

http://www.insanecorp.com/teste.jsp

Seto o encoding em tudo quanto eh canto. Na minha maquina, ao rodar esse exemplo com utf-8, nada eh gravado direito… no banco de dados fica tudo com ??? ( apesar de que, ate ai, pode ser o console que nao suporta utf, o que eh mais provavel ).
Soh que ao dar select nos dados, vem tudo com ??? tambem.

Por outro lado, se dou um replaceAll de utf por iso, acontece o seguinte:
o conteudo acentuado, no formato brasileiro, eh listado incorretamente ao dar um select no braco via console - mais uma vez, devido a problemas de encoding do proprio console -, mas eh listado corretamente na pagina html.

Em relacao aos caracteres cirilicos, acontece algo “engracado”, que deve ser relacionado as mutretas do driver jdbc: o conteudo eh gravado no banco utilizando a mesma nomenclatura HTML, ou seja, #&4d00;, por exemplo. Assim, ao dar o select, o conteudo vem corretamente para mim. Isso nao acontece quando utilizo utf.
Passei ao Tomcat o -Dfile.encoding=UTF-8 e o mesmo para iso, mas nao pareceu ter feito efeito algum em relacao aos resultados. Ate onde eu entendi, eu deveria poder utilizar UTF-8 para qualquer tipo de conteudo, seja ele pt_BR ou BIG5.

Ha alguns dos passos descritos no post do Luca que eu nao fiz, mais especificamente as configuracoes de encoding de URI no server.xml ( pura preguica… se for isso o que falta, eu me jogo da ponte ).

Enfim, se alguem tiver alguma ideia ou algo do genero, por favor, diga-me :slight_smile:

Rafael

3 Respostas

Rafael_Steil

Ah, ignorem o

String s = new String(request.getParameter("value").getBytes("ISO-8859-1"), "UTF-8");

que tem no teste.jsp… eu tentei tmb somente com

String s = request.getParameter("value");

alias… tentei varios tipos de combinacoes esdruxulas :mrgreen:

Rafael

Luca

Olá

Sim, é preciso alterar o server.xml.

Mas a alteração mais importante é o parâmetro -Dfile.encoding=UTF-8 de execução do tomcat (ou qq aplicativo Java). Isto não é documentado no Tomcat porque é um parâmetro do Java.

Faça (no Linux):CATALINA_OPTS=-Dfile.encoding=UTF-8 export CATALINA_OPTS

No Windows é preciso incluir CATALINA_OPTS nas variáveis de ambiente em Painel de Controle/Sistema/Variáveis de ambiente

[]s
Luca

Rafael_Steil

Eu coloquei esse -Dfile.encoding no JAVA_OPTS do catalina.bat… Nao serve? bem, vou tentar no CATALINA_OPTS mais tarde e alterar o server.xml

Rafael

Criado 14 de junho de 2004
Ultima resposta 14 de jun. de 2004
Respostas 3
Participantes 2