Problemas com encoding [usando DWR]

6 respostas
A

Estou mexendo numa aplicação feita usando o e-gen.
O cógido é todo em struts, usando hibernate e postgresql com encoding latin1.

Resolvi começar a usar ajax em algumas páginas da minha aplicação e, para isso, optei pelo DWR.
O problema é que agora, exclusivamente nas páginas onde estou usando o ajax, estou tendo problemas com encoding.

Como funciona nas páginas SEM ajax:
Eu insiro caracteres diferentes, como o travessão (), e eles são inseridos normalmente no banco. A única coisa estranha é que quando visualizo os dados usando o PGAdmin o caractere é exibido de forma estranha(), mas aparece certinho quando faço uma consulta e exibo em alguma página da aplicação. Na action que efetua a inserção o resultado de request.getCharacterEncoding() é NULL.

Como está nas páginas COM ajax:
Se tento inserir caracteres especiais recebo uma exceção do banco reclamando que o caractere não é compatível com o encoding latin1 e nada é inserido. Na action que efetua a inserção o resultado de request.getCharacterEncoding() é UTF-8.
A única solução quebra-galho que consegui até agora foi tentar uma conversão usando String.getBytes(“ISO-8859-1”), que troca os caracteres especiais por ‘?’. Perco dados, mas pelo menos consigo inserir o restante no banco.

Aparentemente, quando não seto encoding nenhum E não uso DWR, o browser trata de alguma forma os caracteres especiais e manda num formato que a a aplicação consegue entender. Entretando quando uso o DWR, ele parece forçar o uso de UTF-8, tratando do seu próprio jeito os caracteres especiais, de modo que a aplicação não consegue entendê-los.

Alguém tem alguma idéia de como resolver isso?
Já tentei usar readers/writers para converter de um formato para outro, mas não consegui nenhum resultado que preservasse os dados.
Tentei também setar o encoding como iso8859-1 nas páginas da aplicação, mas mesmo assim nas actions que inseriam os dados dos forms que usaram DWR o encoding continuava UTF-8

PS:Já havia criado outro tópico sobre o assunto, mas como agora tenho condições de explicar melhor o que está acontecendo optei por criar um novo.

6 Respostas

UMC

vc ja viu o encoding do Banco de Dados??
pode ser isso vc ta utilizando UTF-8 e o banco outro tipo!!
vlw
abs

A

UMC:
vc ja viu o encoding do Banco de Dados??
pode ser isso vc ta utilizando UTF-8 e o banco outro tipo!!
vlw
abs

Obrigado, UMC, havia esquecido de colocar essa informação no primeiro post, vou editar.
De fato o encoding do banco de dados não está em UTF-8, e sim em latin1.
O que me incomoda é o fato de mesmo assim conseguir armazenar o caractere que eu citei (que, pelas tabelas de caracteres que achei na net, não está no conjunto de caracteres do latin1) quando não tenho o DWR forçando o uso de UTF-8.
Como última solução considero a troca do encoding do banco (pesquisando antes o impacto disso nos dados), mas antes gostaria de verificar a possibilidade de fazer o DWR não forçar UTF-8.

UMC

Complicado!!
nunca trabalhei com DWR “pretendo dar olhada”!
vou dar uma pesquisada se achar algo posto aki!
vlw
abs

A

UMC:
Complicado!!
nunca trabalhei com DWR “pretendo dar olhada”!
vou dar uma pesquisada se achar algo posto aki!
vlw
abs

Hehe, complicado mesmo. Não achei em lugar nenhum alguém que já tenha passado por esse mesmo problema.
Obrigado pela disposição em ajudar, UMC.
abs

UMC

De nada ! tem certos assuntos que o pessoal nunca viu !rsrs
vai testando varias maneiras ae ate consegir!!
vlw
abs

A

Povo, só pra postar a solução que encontrei:
Mudar o banco para UTF-8.

Não achei nada específico sobre problemas de codificação e DWR, só a informação de que eles usar “URL encoding” para tratar as strings.
A única opção decente que encontrei é usar UTF-8, mas ainda estou encucado com o fato de, sem DWR, ter sido possível guardar esses caracteres não iso-8859-1 num banco com encoding iso-8859-1. Mesmo resolvendo o problema pretendo continuar pesquisando pra saber o porque de isso ter funcionado.

Criado 4 de janeiro de 2010
Ultima resposta 7 de jan. de 2010
Respostas 6
Participantes 2