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.