Xstream e vraptor - problema nas palavras com acento

Olá pessoal,

estou desenvolvendo 2 serviços em um web service usando Vraptor 3. E este usa Xstream.

Quando faço a chamada a um dos serviços dá erro. No browser aparece:

[quote]Erro no processamento de XML: referência para um número de caractere inválido
Posição: http://127.0.0.1:8087/nome_webservice/info_request?request.clientCode=brasil
Número da linha 82, coluna 27: Rua Jos� Machado Filho 10
[/quote]

o erro ocorre no Firefox, no IE não dá erro mas onde tem acento entra um caracter estranho.

Pelo firebug peguei a saída do xml montado.

Rua Jos Machado Filho 10

Pesquisei na web e vi soluções onde varriam o xml e trocavam caracteres com acento. Mas isto exige mais processamento. Eu gostaria de manter os acentos.

Vi num outro tópico aqui do fórum sobre criar a classe CustomXMLSerialization, que é extensão de uma classe para serialização do Vraptor.

Pesquisando mais vi que poderia ser problema de codificação. Os acentos estão na codificação latina ISO-8859-1.

Troquei nesta classe CustomXMLSerialization

protected XStream getXStream() { XStream xStream = new XStream(new DomDriver("UTF-8"));
por

protected XStream getXStream() { XStream xStream = new XStream(new DomDriver("ISO-8859-1"));

mas no xml montado continua aparecendo UTF-8 no cabeçalho.

Tentei também trocar o UTF-8 por ISO-8859-1 via edição de arquivo xml, por um editor de texto. Mas dá o erro mostrado no browser.

Alguém sabe o que devo fazer / já passou por isto ?

Muito obrigado
asdias

Inicialize a sua VM com os argumentos:

se vc quer mesmo o encoding como ISO-8859-1, vc pode colocar no web.xml:

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

Olá pessoa,

obrigado pelas dicas.
Fiz a alteração para o ISO-8859-1, mas o xml continua dando problema.
Fui ver e o problema era outro. Eu pensava que era problema de acento no xml, mas não é.

No banco de dados tem as palavras “Rua Jos Machado Filho 10”

depois de muito trabalho descobri que o código estranho onde está o “é” é um código ASCII sem representação gráfica. (é um “caractere” de controle)

Neste link tem a lista de caracteres de controle em ASCII: http://www.december.com/html/spec/ascii.html
O caractere estranho que está gerando este problema meu é o ETX (controle para “end of text”)

E este não é o único caractere de controle presente no banco de dados. Tem outros.
Investigando vi que o usuário as vezes copia dados de um lugar e cola nas telas de cadastro de um sistema base. Neste copiar e colar entram estes caracteres de controle.

Estou vendo se é possível achar um jeito de “desconsiderar/apagar” estes caracteres de controle que vem ao consultar o banco de dados.

Alguém sabe o que posso fazer ? e como ?

Estou pesquisando na web, vendo se algum já fez isto.
Talvez um tratamento nos métodos de serialização do Xstream no Vraptor resolvesse.

Obrigado,
Abs

tenta imprimir em java esse dado, pra ver se tá lendo com o encoding errado mesmo. System.out.println mesmo.

se no banco foi salvo com o encoding errado, daí vai ter que tratar os dados…

o jeito de converter de um encoding pra outro é:

String nome = "abcção"
byte[] bytes = string.getBytes("UTF-8");
String convertida = new String(bytes, "ISO-8859-1");

tenta pegar um dos dados q está corrompido e fazer uma conversão desse jeito pra ver se aparece o nome certo

Fiz o teste:

no código coloquei

String nome = this.address;
bytesz = nome.getBytes(“UTF-8”);
String convertida;

			convertida = new String(bytesz, "ISO-8859-1");
			System.out.println("nome: " + nome);
			System.out.println("convertida: " + convertida);

nome: Rua Jos Machado Filho 10
convertida: Rua Jos Machado Filho 10

desculpe, meu browser enviou o post. aqui segue o texto certo:

Fiz o teste:

no código coloquei

String nome = this.address; bytesz = nome.getBytes("UTF-8"); String convertida; convertida = new String(bytesz, "ISO-8859-1"); System.out.println("nome: " + nome); System.out.println("convertida: " + convertida);

No output do console pelo Eclipse apareceu:

nome: Rua Jos Machado Filho 10
convertida: Rua Jos Machado Filho 10

Abs

tentou trocar os encodings de lugar?
será que o encoding do banco é outro?