VRaptor 3.02 x Encoding

24 respostas
C

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.

24 Respostas

L

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…

P

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

C

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.

L

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

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

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

C

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

B

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

L

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

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

B

Lavieri,

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

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

L

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?? =/

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)

G

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.

L

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.

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…

B

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

B

É 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

L

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

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.,

B

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

B

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! ¬¬

L

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






L

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…

B

Saquei.

Vou verificar pelo firebug como a requisição está indo.

Mas, como disse, a requisição chega com o charset correto, mas os dados chegam bagunçados. Isso tudo antes de qualquer interação com o banco de dados. Eu usei um submit normal, e os dados foram enviados corretamente.

Depois posto o resultado.

J

bronx:
Saquei.

Vou verificar pelo firebug como a requisição está indo.

Mas, como disse, a requisição chega com o charset correto, mas os dados chegam bagunçados. Isso tudo antes de qualquer interação com o banco de dados. Eu usei um submit normal, e os dados foram enviados corretamente.

Depois posto o resultado.

Voce conseguiu resolver este poblema vi que parece ser pau mesmo jQuery ?

B

Cara, parece que o lance é com o XmlHttpRequest mesmo.

Não lembro ao certo, mas parece que toda requisição ajax vai sempre com o UTF-8.
Só me lembro que pra resolver eu simplesmente abandonei o ISO e agora só uso UTF-8.

Por questões de padronização, recomendo que faça o mesmo…rs

Abç

G

Juro que em algum lugar eu lí que o ISO-8859-1 está em depreciated. Porém não sei se isso é verdade.

De qualquer forma usar UTF-8 por padrão em tudo evita essas dores de cabeça.

G

Opa! Beleza pessoal?
Eu tive o mesmo problema, tenho até um tópico sobre isso. Resolvi deixando td em UTF-8, até no web.xml, e somente na página que faz o envio dos dados, como uma busca, setei assim a JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="UTF-8"%>

Ai envia com os caracteres certos e o resultado da busca vêm corretamente tb.
Link pro tópico: http://www.guj.com.br/posts/list/220241.java
[]s

Criado 29 de novembro de 2009
Ultima resposta 8 de out. de 2010
Respostas 24
Participantes 8