Ajax - Problema de acentuaçao e caracteres especiais

2 respostas
C

Bom dia, amigos do GUJ, estou quebrando a cabeça para tentar solucionar problemas relacionados a acentuaçao e caracteres especiais usando Ajax.

O problema ocorre apenas no retorno do resultado para a página.

Procurando no Google encontrei varios comentarios e opinioes sobre soluçoes para isto, porem, nao obtive sucesso em nenhuma delas.

Eis aqui o que eu já tentei fazer e NAO funcionou:

No codigo do Ajax também tentei:

Alguem já passou por isso e sabe o que mais posso tentar fazer?

Obrigado desde já pela atençao!

2 Respostas

P

Pelo fato de vc. ter mencionado AJAX, assumo que seu problema está em exibir caracteres acentuados em um conteúdo qualquer que veio como resposta de um XMLHttpRequest, certo ?

Se nem isto está rolando, o primeiro passo é garantir que uma página JSP normal, quando visualizada no seu browser, mostre acentos corretamente.

O browser usa a informação do header e do próprio documento (via meta ou PI) para saber qual a codificação do que está vindo e apresentá-la na tela.

No caso o AJAX, temos um segundo documento que vem na resposta do XMLHttpRequest. No processamente deste segundo documento, vc. deve usar o Content-Type “text/xml” e o encoding que vc. quiser, que não precisa ser o mesmo do documento já carregado. O importante é ter o PI logo no início (<?xml version="1.0" encoding="xxxxx" ?>) e gerar a página de forma consistente.

P.ex, se a resposta passa por um JSP, use
<%@ page contentType=“text/xml; charset=ISO-8859-1” %>
no JSP que gera a resposta.

S

Vejo que muitos estão com esse problema e encontrei uma solução viável para corrigí-lo.

Não farei a explicação técnica, apenas a solução.

Coloque no seu javascript a função encodeURI.

Nos dados que vc for enviar para o servidor web ou conteiner

var texto = encodeURI(document.forms[0].meuTexto.value);

Dessa forma, vc estará forçando o enconding em UTF-8.

Na sua action ou servlet java, use a classe URLDecoder, método decode para decodificar os caracteres no formato UTF-8.

String meuTexto = URLDecoder.decode(request.getParameter("meuTexto"), "UTF8");

     System.out.println("Texto corrigido: " + meuTexto);

Pronto, com isso vcs conseguiram exibir os acentos corretamente e cedilhas.

Criado 23 de novembro de 2006
Ultima resposta 16 de dez. de 2008
Respostas 2
Participantes 3