Problema ao ler arquivo em formato Unicode

5 respostas
filejava
D

Ola,

Estou importando um arquivo que pode ser ASCI ou Unicode, porém quando importo o que esta no formato Unicode as funções de comparação não funcionam corretamente e ao jogar o conteúdo de qualquer linha do arquivo em um JPanel cada letra fica separada por um simbolo (No caso um quadrado, semelhante a quado o caracter não é reconhecido). Imaginando que o quadrado é um # ele fica dessa forma:

ASCI
ACL1200

Unicode
A#C#L#1#2#0#0

O curioso é que se uso o System.out.println ele não tem este problema ao exibir o conteúdo.

Ja tentei importar o arquivo assim:
Scanner in = new Scanner(new FileReader(v_projeto));

e assim:
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(v_projeto), “UNICODE”));

Procurei na net e não achei nada, alguém já teve um problema parecido?

Obrigado.

5 Respostas

D

Se sai certo no console, talvez o problema esteja na codificação do Componente Swing (que eu imagino que seja configurável)

D

Não acredito que possa estar relacionado ao componente Swing pois quando vou fazer algumas comparações com equals elas também não funcionam com o arquivo Unicode, o que significa que o conteúdo da linha tem alguma coisa diferente mesmo o print no console sendo igual.

De qualquer forma também tentei identificar onde eu poderia alterar a configuração do Swing mas não encontrei relacionado a codificação, confesso que sou bem inexperiente com java ainda.

D

Hum, como teste vc pode tentar imprimir no console cada um dos caracteres por vez, percorrendo a String num loop, pra ver se aparece os Quadrados. Ou comparar caracter a caracter. Também pode comparar o lenght() das Strings pra ver se uma tem realmente mais caracters que a outra.

Tenha em mente que o que se lê de um Arquivo são bytes, depois esses bytes são associados com uma codificação (que deve ser a codificação adequada). Tenta usar um FileInputStream (ou quem sabe um ByteArrayInputStream [essa classe não conheço bem]) pra ler os bytes do arquivo, carregando todos eles em um byte[] bytesDoArquivo, depois, instancia umas Strings passando esses bytes e a codificação:

String s1 = new String(bytesDoArquivo, StandardCharsets.US_ASCII);

String s2 = new String(bytesDoArquivo, StandardCharsets.StandardCharsets.UTF_16BE);

String s2 = new String(bytesDoArquivo, StandardCharsets.StandardCharsets.UTF_16LE);

Daí veja se alguma das Strings acima ficou certa, se sim, pode ser o caminho para a solução :slight_smile:

Qualquer coisa, poste seu código aqui (tirando tudo o que não tem haver com o problema), estilo MCVE.

De qualquer forma, poste aqui seu feedback, se deu certo ou não eu gostaria de saber :slight_smile:

D

Conseguiu resolver?

D

Desculpe a demora para responder, correria, porém o que eu fiz foi usar uma função (Não lembro qual agora) para extrair o código unicode desse caractere em branco (Apesar de não aparecer o espaço em branco usando o system.outprint ele o exergava com o split) e depois dei um replaceall para trocar essa caractere muito loco por nada.

Criado 20 de julho de 2017
Ultima resposta 26 de jul. de 2017
Respostas 5
Participantes 2