Problema codificação página

5 respostas
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

5 Respostas

Abdon

Vc pode dizer o encode no web.xml através de uma context-param na propriedade br.com.caelum.vraptor.encoding

softwork

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:

-Dfile.encoding=UTF-8

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

renanpto

Estou usando o VRaptor 2, e essa configuração é usada na versao 3 http://vraptor.caelum.com.br/documentacao/configuracoes-avancadas-sobrescrevendo-as-convencoes-e-comportamento-do-vraptor/

Obrigado

renanpto

softwork:
Boa Tarde,

Já estava lendo os links que sugeriu.

1º, alterei o fonte ficando assim

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

Como estou usando o VRaptor 2, a sua opção 2 nao é aplicada.

A 3º não adicionei pois esse atributo do form nao funciona no IE, eu preciso que funfe no IE e FireFox.

4º - todas as paginas possuem essa diretiva.

5º - adicionei a linha que comentou no Catalina.bat

6º - nao adicionei esses parametros pois eles ja sao setados pela prototype como valores default “UTF-8”.

Apos esses passos ainda nao funfo… isso ta me dando dor de cabeça já. hUAhuA

Por a caso voce esta usando o Gzip para comprimir a resposta pro browser ?

Obrigado pela ajuda.

Abraco

renanpto

Bom Dia Senhores,

Apos diversas tentativas, consegui resolver o problema.

No filtro que recebe as requisicoes forcei o encode incluindo

ServletRequest.setCharacterEncoding("UTF-8");

Já tinha usado isso antes mas nao tinha obtido sucesso, sabem porque ?? Nesse projeto existe mais de um filtro na aplicacao. FOi ai que matei a charada.

Solucao, no web.xml deixei o filtro que seta o encode como o primeiro no mapeamento. Simples !.

Obrigado a todos pela ajuda :wink: .

Criado 1 de março de 2010
Ultima resposta 2 de mar. de 2010
Respostas 5
Participantes 3