VRaptor 3.02 x Encoding

Estou com problema para trabalhar com UTF-8. Fiz o seguinte:

web.xml:

    <context-param>  
        <param-name>br.com.caelum.vraptor.encoding</param-name>  
        <param-value>UTF-8</param-value>  
    </context-param>  

view (jsp):

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...

Conteúdo que está gerando problema:

<a href='../naturezaOpCompra/listar?coluna=Código&valor_pesquisa=&pagina=1&linhasPorPagina=15&ordem=Código'>Código</a>

Conteúdo que chega no Controller, pela variável ‘coluna’:

Código

Se escrevo sem acentuação, funciona direito.
Se a mesma palavra com acento e enviada em um input tipo text, também vai bem.
Se alguém tiver alguma sugestão, agradeço.

tenta escapar os acentos no link (trocar os acentos por %F3, ou coisas do tipo)… é fácil fazer isso com javascript, que já tem a função escape que recebe uma string e retorna ela escapada desse jeito… passar acentos via query na url não é bom, e nem eh o padrão…

Oi cinei

É exatamente isso, alguns browser (particularmente o IE) não fazem o “url encoding” quando você acessa uma URL. E mesmo quando fazem, cada um vai fazer num encoding diferente, já que as URLs por padrão deveriam ter acentos (basicamente um ASCII): http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

Ok pessoal, obrigado.
Vou procurar uma alternativa para enviar os parametros sem acentos.
Terei que alterar em vários lugares ou deixar charset =ISO-8859-1, que até agora não deu problema.

antes tenta escapar os acentos com aquele javascript que eu te mandei…

escape("alguma String com acentos e espaços");

Apenas complementando o que o pessoal falou, é aconselhado você sempre fazer o encoding da URL. Se você enviar como parametro fica tudo bem, mas quando você coloca na URL fica esse caos. No Java há as classes java.net.URLEncoder e java.net.URLDecoder.

Uma coisa que você deve notar, independente desse caso da URL, é que seus arquivos estejam sendo salvos com o mesmo encoding que você especificou no seu projeto e nos headers do html. Já ví casos do pessoal salvando arquivos em iso-8859-1 e colocando o encoding como utf-8. No meu caso como o padrão do Linux já é uft-8 não tive problemas, mas se não me engano no windows é iso-8859-1, que é o mesmo cp15xx.

Abraços

Farei isso mesmo, Lucas. Valeu pela dica.
Garicia, terei o cuidado de manter nas diversas ferramentas o encoding equivalentes (html, banco, Eclipse, …) .

Aproveitando o hook…

Estou tendo [quase] o mesmo problema.

No meu caso, isso ocorre quando utilizo o jQuery para fazer um POST via ajax. Meus dados acentuados ficam sinistros:

Próximo //Próximo
São Paulo //São Paulo

e por aí vai…

Estou usando ISO-8859-1, e [acho que] já setei essa informação em todos os cantos necessários:

//Na JSP:

	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

//No VRaptor:

	<context-param>
	    <param-name>br.com.caelum.vraptor.encoding</param-name>
	    <param-value>ISO-8859-1</param-value>
	</context-param>

//E no jQuery:

	$.ajax({
		type: 'POST',
		url: action,
		data: getDadosFormatados(),
		contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1",
		//(...)
	});

No server, um request.getCharacterEncoding() mostra que o charset está de fato chegando como ISO-8859-1. Mas os caracteres ainda estão zuados…

Alguém já passou por isso aqui? Poderiam dar um help???

Vlw

[quote=bronx]Aproveitando o hook…

Estou tendo [quase] o mesmo problema.

No meu caso, isso ocorre quando utilizo o jQuery para fazer um POST via ajax. Meus dados acentuados ficam sinistros:

Próximo //Próximo
São Paulo //São Paulo

e por aí vai…

Estou usando ISO-8859-1, e [acho que] já setei essa informação em todos os cantos necessários:

//Na JSP:

	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

//No VRaptor:

	<context-param>
	    <param-name>br.com.caelum.vraptor.encoding</param-name>
	    <param-value>ISO-8859-1</param-value>
	</context-param>

//E no jQuery:

	$.ajax({
		type: 'POST',
		url: action,
		data: getDadosFormatados(),
		contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1",
		//(...)
	});

No server, um request.getCharacterEncoding() mostra que o charset está de fato chegando como ISO-8859-1. Mas os caracteres ainda estão zuados…

Alguém já passou por isso aqui? Poderiam dar um help???

Vlw[/quote]

acrescente isso aqui bronx

<context-param> <param-name>br.com.caelum.vraptor.encoding</param-name> <param-value>ISO-8859-1</param-value> </context-param>

que resolve…

passei por problemas semelhantes, só que no meu caso é utf

Lavieri,

Valeu pelo help. Mas olha o meu post anterior…eu já havia feito isso! rs

Mais alguém passou por essa situação?? =/

[quote=bronx]Lavieri,

Valeu pelo help. Mas olha o meu post anterior…eu já havia feito isso! rs

Mais alguém passou por essa situação?? =/

[/quote]

lol! eu vi errado… mau ai…

eu passei sim por isso… mas foi com UTF, passei maus bucados…

saiba que as tags aceitam encoding e nelas eu também coloquei o UTF … por padrão o javascript com ajax usa ISO, então seu problema é provavelmente outro… se o dados estão indo parar errado no banco, pode ser o encoding do banco… se for no método, ai é o encoding do server mesmo…

enfim… eu sofri pra resolver…

usei accept-charset nos entre outras coisas… pesquisei na net, e encontrei algumas formas de setar encoding nos ajax… mas no final… o que melhor resolveu foi a tag do vraptor (eu uso a versão mais nova do vraptor)

Há uma coisa importante. Além de você declarar seu charset, seja dele UFT-8/16 ou ISO-8859-1 você precisa salvar seus arquivos nesse mesmo formato, e cuidar para que o container também trabalhe nesse formato.

Não que o charset do appserver e do SO seja um ítem fundamental, porém é importante estarem todos de acordo, isso evitará problemas.

Outro dia um amigo comentou que estava usando UTF-8 no Jdeveloper e sempre que sincronizada com o Source (un)Safe os caracteres vinham deformados. Após uma série de pesquisas ele notou que o charset do VSS estava como ISO-8859-1.

Eu tomei por decisão usar tudo como UTF-8, já que esse é o padrão do Unix. Desde meu Eclipse, appservers, banco de dados, tudo com UTF-8, e não tive mais problemas.

[quote=garcia-jj]…
Eu tomei por decisão usar tudo como UTF-8, já que esse é o padrão do Unix. Desde meu Eclipse, appservers, banco de dados, tudo com UTF-8, e não tive mais problemas.[/quote]

fiz o mesmo… tudo em UTF-8 … o meu problema ocorreu pq estava faltando o UTF no encoding do vraptor… como o ajax postava tudo em ISO, o contianer respondia em iso, e vinha os problemas… depois q coloquei o treco do vraptor, tudo resolveu…

mas faço o mesmo, SVN, eclipse, e tudo mais em utf… ate a turma do designer e montagem, usam UTF-8 nos dreamweaver e etcs…

Srs.,

No banco está td em ordem. Os caracteres já chegam bagunçados no servidor. E o request chega com o encoding devidamente preenchido (ISO-8859-1).

Entao, se o encoding chega certo, significa que os valores que estou passando estão num charset diferente. Mas já setei o charset correto nas JSPs, então, sinceramente, não sei o que fazer…=S

É alguma zica com o jQuery.
Fiz o submit do form normalmente, e os dados chegaram certos no server.
Na hora de fazer o post assíncrono, o jQuery não deve estar setando corretamente o valor do charset
Vou caçar algo e assim q achar eu posto aqui

[quote=bronx]É alguma zica com o jQuery.
Fiz o submit do form normalmente, e os dados chegaram certos no server.
Na hora de fazer o post assíncrono, o jQuery não deve estar setando corretamente o valor do charset
Vou caçar algo e assim q achar eu posto aqui
[/quote]

quando o servidor responde via AJAX, no objeto JSONSerialization na implementação… o objeto pega o HttpServletResponse, e pega o getWrite(),

se quer alterar o encode forçadamente… vc pode pegar eesse arquivo extender, pegar o response, e setar o encode nele…

na requisição de entrada, como é o seu caso, pode ser que algo parecido esteja acontecendo… só vendo o caso mesmo… com debug, no passo a passo, ver a requisição sendo postada na Firebug, e seguindo os dados dentro do eclipse.,

Então, a requisição está chegando com o charset correto…=S
Como eu vejo essas informações no firebug?? Newbie total na parada

Shit

Já fiz de tudo:

	$.ajax({
		type: 'POST',
		url: action,
		contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1",
		beforeSend : function(xhr) {
	    	xhr.overrideMimeType("text/html; charset=ISO-8859-1");
	    }, (...)});
<script type="text/javascript" charset="ISO-8859-1" src="<c:url value='/js/blablabla.js'/>"></script>

Fora o que já postei.
Enfim…tá foda! ¬¬

Você pode ver no FireBug clicando no icon do bizouro no seu FireFox (é preciso estar com o componente firebug instalado, se não tiver clique em Ferramentas > Complementos e procure pelo FireBug)

Ao clicar no bezouro, abre uma parte cheida de opções… escolha REDE … e então poste os dados… após postar tem várias informações do post… onde vc pode verificar os dados postados, e os cabeçalhos… vou exemplificar com esse post aqui.

Edit… atachando prints






Fora isso… é bom vc debugar a entrada dos dados no VRaptor, ver c eles chegam como ISO… imprima eles no console ou no LOG, e veja se como estão os dados…

pois o erro ainda pode ser na hora de salvar no banco, enfim… tem q ver com detalhes…