renanpto:
Boa Tarde,
Estou tentando resolver um problema bastante discutido aqui no forum, a codificação usada nas paginas JSP…
Preciso que a codificação seja UTF-8 devido ao framework Vraptor 2 e Gzip.
Todas as paginas jsp possuem a declaração do charset:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
A acentuação nas páginas está exibindo corretamente durante a renderizacao, o problema que quando digitado palavras com acento e submetido ao VRaptor, os acentos chegam trocados por aqueles caracteres estranhos (ção), dando a impressao que o texto foi enviado codificado em UTF-8 mas foi lido pelo tomcat ou vraptor como ISO-8859-1.
Caso alguém já passou por algo parecido e puder compartilhar fico agradecido =D.
Estive lendo alguns topicos aqui do GUJ sobre issom, o q achei mais util foi esse http://www.guj.com.br/posts/list/12456.java, mas nao consegui resolver meu problema.
Obrigado
Então Bro.
Vou tentar lhe ajudar, pois passei por algo parecido, porém no meu caso foi anecessidade de colocar como ISO-8859-1, então lá vai:
1º) Editar o arquivo server.xml e localizar a chave URIEncoding passando seu valor para UTF-8, caso se já não estiver!
2º) Edite o arquivo web.xml e coloque as seguintes linhas:
<context-param>
<description>VRaptor handles HTTP requests in UTF-8 format</description>
<param-name>br.com.caelum.vraptor.encoding</param-name>
<param-value>UTF-8</param-value>
</context-param>
3º) Os formulários HTML (opcional) podem estar assim:
<form action=". . ." accept-charset="utf-8">
4º) Os arquivos JSP devem conter:
<%@ page contentType="text/html; charset=UTF-8" %>
5º) Os scripts Catalina.bat (Windows) e catalina.sh (Unix) precisam do seguinte parâmetro (não documentado) para chamar o Java:
6º) Não menos importante, se você estiver fazendo chamadas AJAX, nao se esqueça de informar os parâmetros encoding e contentType, exemplo:
var myAjax = new Ajax.Request(url, {
/*
Para evitar o problema de acentuação entre UTF-8 e ISO-8859-1 (LATIN1)
é necessário aplicar o "encoding" e também "contentType",
porém NUNCA se esquecer de enviar pelo método POST.
*/
method: 'post',
encoding: 'ISO-8859-1',
contentType: 'application/x-www-form-urlencoded',
asynchronous: true,
parameters: "endereco.id="+document.getElementById("id").value+"&endereco.logradouro="+document.getElementById("logradouro").value,
onComplete: function(data) {
//recebe o objeto json e faz eval
var jsonObject = eval('(' + data.responseText + ')');
if (jsonObject.erros != null)
alert(jsonObject.erros);
else
alert('Dados enviados com sucesso!');
},
onFailure: function(t) {
alert('Error ' + t.status + ' -- ' + t.statusText)
}
});
NOTA: Algumas informações acima foram disponibilizadas pelo usuário Luca.
Espero que ajude a esclarecer algumas dúvidas ou direcionar a um caminho de sucesso.
Boa sorte.
Referências aqui e aqui