Problema ao ler arquivo em formato Unicode

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.

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

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.

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:

Conseguiu resolver?

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.