Caracteres inválidos

17 respostas
A

Boa tarde Galera … :smiley:

Estou enrolado no seguinte problema:

Tenho um método que trás informações da tabela do banco (Postgress).
Então … Com essas informaçòes eu gero um arquivo xml.

Pois bem …

Em ambiente Windows, gera numa boa …
Mas se rodar um ambiente Linux, o arquivo xml é gerado, mas o texto incluso nele fica com caracteres especiais …

Ex:
Se do banco vier a frase:
“Hoje é sexta feira, dia de curitr uma Festança de montão”

No xml, criado em ambiente linux, todos os acentos vão esta errados, tipo esse ( montão = montão)

Alguém pode me ajudar !!! Não sei nem por onde começar a procurar esse erro … hehhe … :oops:

Talvez se eu colocar a parte do fonte que cria o arquivo fisico possa ajudar:

//Realiza a saida do XML para um arquivo fisico
Transformer transf = TransformerFactory.newInstance().newTransformer();
transf.setOutputProperty(OutputKeys.METHOD, "xml");
transf.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
transf.setOutputProperty(OutputKeys.INDENT, "yes");

try {
   transf.transform(new DOMSource(doc), new StreamResult(new FileWriter(new File(strPathSaida + strNomeArquivo))));
   transf = null;
} catch (Exception e) {
   System.out.println("Erro ao gerar o arquivo XML:" + e.getMessage());
}

Acho que vale dizer que o doc, da parte DOMSource(doc) é um
Document doc;

Obrigado :smiley:

17 Respostas

Luca

Olá

  1. Em qual sistema operacional está o banco?

  2. Qual o encoding default do seu linux?

3. Como está a linha de comando que executa o Java? Inclui -Dfile.encoding=ISO-8859-1?

[]s
Luca

rigolin

Esse problema acontece por causa do padrão de codificação de caracteres
que vc usa…

Vc pode modificar a codificação de utf8 para ISO8859-15 (arquivo:
/etc/sysconfig/i18n).

No seu sistema deve estar assim:

LANG="en_US.UTF-8" SUPPORTED="en_US.UTF-8:en_US:en:pt_BR.UTF-8:pt_BR:pt" SYSFONT="latarcyrheb-sun16"

A

Luca

  1. O banco esta num servidor LINUX.
  2. O Encoding default é o utf8.
  3. Não, a linha não inclui o Dfile.encoding=ISO-8859-1

Como coloco esse Dfile.encoding=ISO-8859-1 ???

rigolin
Como que eu mudo esse parametro no arquivo: /etc/sysconfig/i18n ??

Galera … Valew a força … :smiley:
E me desculpem pelas perguntas, mas é que eu não manjo nadinha de Linux. :oops:

Luca

Olá

Como normalment vc inclui qq parâmetro -D na linha de comando do javajava -Dfile.encoding=ISO-8859-1 -cp -sei_lá_o_que resto_do_seu_comando.

Se for no tomcat includa o -Dfile.encoding=ISO-8859-1 em CATALINA_OPTS

Peça para o administrador da sua máquina (usuário root) para editar este arquivo e mudar convenientemente se for o caso. Note que UTF-8 pode não ser a causa do problema.

Procure aqui no GUJ sobre character encoding.

[]s
Luca

rigolin

andrejs:
rigolin
Como que eu mudo esse parametro no arquivo: /etc/sysconfig/i18n ??

Tente isso:

LANG="en_US"
SUPPORTED="iso8859-1:en_US.UTF-8:en_US:en:pt_BR.UTF-8:pt_BR:pt"
SYSFONT="latarcyrheb-sun16"

Efetue logout.

Sami_Koivu

Se a problema é a codificação, existe mais um jeito.

Em vez de:

transf.transform(new DOMSource(doc), new StreamResult(new FileWriter(new File(strPathSaida + strNomeArquivo))));

você poderia ter o seguinte:

transf.transform(new DOMSource(doc), new StreamResult(new OutputStreamWriter(new FileOutputStream(new File(strPathSaida + strNomeArquivo)), "ISO-8859-1")));

O que isso faz é que seu arquivo vai ser escrito em ISO-8859-1 em vez de codificação do Linux.

-Sami

A

Sami … Origado … Vou alterar meu fonte fazer os testes … Ja ja eu digo se funfou …

Valewwww :smiley:

A

Putz Sami … Não deu certo essa maneira não … :frowning:

Sami_Koivu

Que pena. Qual foi o resultado? Continua ( montão = montão) ?

-Sami

A

Sim … Sim … Continua (montão = montão) hehee …

Vou tentar mudar o arquivo: /etc/sysconfig/i18n como foi sugerido pelo rigolin.

Vou testar e depois mando o resultado !!!..

Mas Sami, tem alguma outra possibilidade ???

Obrigado a todos pela ajuda hein … :smiley:

Luca

Olá

É óbvio que vc já alterou o encoding do Java, certo? o que mudou com isto?

[]s
Luca

A

Putz Galera … Alterei o /etc/sysconfig/i18n …
Para:

LANG=“en_US”
SUPPORTED=“iso8859-1:en_US.UTF-8:en_US:en:pt_BR.UTF-8:pt_BR:pt”
SYSFONT=“latarcyrheb-sun16”

Mas continua gerando (montão = montão) …

Qual a forma correta de escrever o iso8859-1 ???

Miusculas e Minusculas diferenciam ???
“iso” é junto de “8859-1” ?? ou existe um “-” (traço) entre eles ???

Pergunto isso por que no meu fonte existe a linha(indicada pelo Sami):
transf.transform(new DOMSource(doc), new StreamResult(new OutputStreamWriter(new FileOutputStream(new File(strPathSaida + strNomeArquivo)), “ISO-8859-1”)));

Reparem que o “ISO-8859-1” esta maiusculo e com o traço separando o ISO do 8859-1.

Num to conseguindo :frowning:

A

Putz Galera … Alterei o /etc/sysconfig/i18n …
Para:

LANG=“en_US”
SUPPORTED=“iso8859-1:en_US.UTF-8:en_US:en:pt_BR.UTF-8:pt_BR:pt”
SYSFONT=“latarcyrheb-sun16”

Mas continua gerando (montão = montão) …

Qual a forma correta de escrever o iso8859-1 ???

Miusculas e Minusculas diferenciam ???
“iso” é junto de “8859-1” ?? ou existe um “-” (traço) entre eles ???

Pergunto isso por que no meu fonte existe a linha(indicada pelo Sami):
transf.transform(new DOMSource(doc), new StreamResult(new OutputStreamWriter(new FileOutputStream(new File(strPathSaida + strNomeArquivo)), “ISO-8859-1”)));

Reparem que o “ISO-8859-1” esta maiusculo e com o traço separando o ISO do 8859-1.

Num to conseguindo :frowning:

Luca

Olá

É até chato perguntar de novo mas como vc não respondeu ainda…

Já testou executar o java alterando o encoding default ?

[]s
Luca

A

:smiley: Galera :smiley:

OK ok OK … Deu certo.

Obrigado Obrigado pela ajuda … :stuck_out_tongue:

Luca

Olá

Agora vc está intimado a dizer como deu certo. Eu escrevi um texto que vc deve ter lido aqui no GUJ sobre character encoding dizendo claramente que o default do Java não é ISO-8859-1. Falei 3 vezes para vc fazer isto e agora fiquei curioso para saber se foi isto que resolveu seu problema.

[]s
Luca

A

Perdão Luca …

Desculpa ai Galera …
Falha em não ter descrito a solução … :oops:

Fiz justamente o que vocês escreveram aqui …

  • No arquivo /etc/sysconfig/i18n alterei para

LANG=“en_US”
SUPPORTED=“iso8859-1:en_US.UTF-8:en_US:en:pt_BR.UTF-8:pt_BR:pt”
SYSFONT=“latarcyrheb-sun16”

  • No fonte usei

transf.transform(new DOMSource(doc), new StreamResult(new OutputStreamWriter(new FileOutputStream(new File(strPathSaida + strNomeArquivo)), “ISO-8859-1”)));

Eu não utilizei o -Dfile.encoding=ISO-8859-1

Meu primeiro teste não deu certo, pois como eu nào mexo no Linux pedi para o responsável aqui alterar o arquivo. Mas ele escreveu errado e eu nem tinha visto.
Dai refizemos o teste … pedi pra ele refazer o arquivo … Dai deu certo.

Obrigado pessoal. :smiley:

Criado 14 de janeiro de 2005
Ultima resposta 20 de jan. de 2005
Respostas 17
Participantes 4