• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Rui Carlos

Problemas com encoding

17 mensagens neste tópico

Numa aplicação que estou a desenvolver, tenho que gerar ficheiros XML, que queria que estivessem em UTF-8. Mas não estou a conseguir fazê-lo ;)

Estou a usar o seguinte código (a string está em this.file):

FileOutputStream out = new FileOutputStream(path);
OutputStreamWriter osw = new OutputStreamWriter(out,"UTF-8");
            
osw.write(this.file.toString());
osw.close();

O texto é obtido de uma base de dados que está em UTF-8.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pá então o problema não é do writer ou é da BD ou então da forma como estás a criar o XML.

Já agora como estás a gerar o XML ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O ficheiro não fica em UTF-8 ou o conteudo é que não é inserido correctamente?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No XML eu indico que o encoding será UTF-8, e como tal, precisava que as string que são enviadas para esse ficheiro ficassem em UTF-8. Mas isso não está a acontecer (fazendo algo como out.write("ç");, e abrindo com Vim, não aparece direito, para além de dar erro ao fazer o parsing).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece que o problema já está mais ou menos resolvido. Parece que o problema é quando uso strings declaradas no código fonte, com strings que vêm da BD já não dá problemas (em princípio deve ser suficiente)

Acabei por deixar assim:

FileOutputStream out=new FileOutputStream(path);
out.write(this.file.toString().getBytes("UTF-8"));

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em todo o caso acho que devias usar um mecanismo para criar o XML e não fazer à martelada como parece que é o caso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em todo o caso acho que devias usar um mecanismo para criar o XML e não fazer à martelada como parece que é o caso.

Eu só preciso de preencher meia-dúzia de buracos... Depois é só juntar blocos que tenho noutros ficheiros. Por acaso tenho bibliotecas que até permitiam gerar o XML (já no formato que quero), mas como a estrutura é mais ou menos estática, apenas ia tornar o processo menos eficiente. Gerar todo o XML através do Java, tendo em conta a complexidade da sua estrutura, era impensável.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Verifica o charset do ficheiro.

Isto é uma coisa que tenho pouca experiencia, aquando da compilação tem que estar definido algures o charset alvo para o compilador saber como codificar por exemplo as strings que atribuis manualmente.

O java tem suporte para unicode, infelizmente nunca me de ao trabalho ver como isso funciona em detalhe ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também já resolvi o problema dos ficheiro. É necessário adicionar na compilação a opção -encoding UTF-8.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também já resolvi o problema dos ficheiro. É necessário adicionar na compilação a opção -encoding UTF-8.

Sim podes dizer o enconding em que queres as classes compiladas, por acaso não me lembrei disso ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas isso não está a acontecer (fazendo algo como out.write("ç");, e abrindo com Vim, não aparece direito, para além de dar erro ao fazer o parsing).

Isto é um erro, caracteres deste tipo nunca são colocados assim no código, tens de colocar o código unicode do caracter que queres ou usar as ferramentas de conversão que o JDK tem para converteres os caracteres automáticamente.

Ainda bem que já resolveste o problema, a solução simples será garantires que o ficheiro de código está a usar o encoding com que pretendes que o XML seja escrito, mas isso é uma solução que serve apenas para testar e desenrascar, correctamente tens de usar as sequências de escape e os códigos unicode.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a solução simples será garantires que o ficheiro de código está a usar o encoding com que pretendes que o XML seja escrito

O ficheiro de código estava em UTF-8, mas só com a flag de compilação é que resolveu o problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se tiveste de adicionar a flag para indicar que o ficheiro estave em UTF-8 então o ficheiro não estava correctamente em UTF-8, o compilador identifica bem o encoding. Seja como for, essa como disse, é uma solução simples e "tapa buracos", não deve ser usada.

Mas agora fiquei curioso, que editor usas e que tipo de UTF-8 estavas a usar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se tiveste de adicionar a flag para indicar que o ficheiro estave em UTF-8 então o ficheiro não estava correctamente em UTF-8, o compilador identifica bem o encoding. Seja como for, essa como disse, é uma solução simples e "tapa buracos", não deve ser usada.

Mas agora fiquei curioso, que editor usas e que tipo de UTF-8 estavas a usar?

O ficheiro estava em UTF-8 sim. Estou a usar o NetBeans, mas para confirmar isso, usei o Vim e a consola (com o comando cat).

Pelo que li, quando não é indicada a flag, e Java usa o encoding default do sistema (o que continua a ser estranho porque na variável LANG estou a indicar que uso o UTF-8, mas como não compilei na consola, se calhar o NetBeans não determina o encoding a partir dessa variável).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso realmente é estranho, perguntei se estava a usar UTF-8 mas era para saber se estavas a usar UTF-8 com ou sem BOM, terias de usar sem e por vezes os editores colocam com. No caso do Netbeans não te consigo precisar mas o encoding é determinado no arranque da JVM, ao arrancar a JVM pergunta ao SO qual o encoding a usar, mas se tens o sistema configurado para usar UTF-8 não percebo porque raio o ficheiro não é detectado correctamente.

Também não consigo saber onde o netbeans vai buscar o encoding, ora aqui está um bom problema... vou ver se descubro qualquer coisa sobre o assunto, é que agora fiquei a pensar o que raio pode ter acontecido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora