[RESOLVIDO] Problema ao ler arquivo

7 respostas
J

Estou desenvolvendo uma aplicação que fica lendo arquivos, que são gerados diariamente.
E para ler os arquivos eu uso o método RandomAccessFile.readByte, e faço um casting para char.
Debugando a mesma, vi que quando tenho um caracter especial como, “ã”, o caracter é “alterado” por exemplo para “?”, alguém sabe explicar pq isso acontece?
Como eu posso solucionar este erro?

7 Respostas

E

Seu arquivo está em um formato diferente do formato UNICODE 16 bits (UTF 16), pode ser que esteja em UTF 8 mas o mais provável é que seu arquivo esteja no formato ASCII.
Primeiro descubra que tipo está seu arquivo. Depois pesquise conversão para o formato UNICODE 16.

Se não conseguir posta aqui.

J

Eu estou lendo os dados de um txt, que está em ASCII.
Sabe de alguma solução que faça esse parse?

E

A classe InputStreamReader permite que você utilize uma string para dizer o char set acredito que no seu caso seja US-ASCII.

Dá uma olhada no Java doc

J

O problema é que eu tenho que usar a classe RandomAccessFile, para poder gravar o ponteiro, de onde parou a leitura e poder depois recomeçar do ponto em que paroou o mesmo.

E

Bom,

Então o único caminho que eu conheço é utilizar a classe do Java NIO Charset

Charset c = Charset.forName(US-ASCII);

CharsetDecoder decoder = c.newDecoder();

CharsetEncoder encoder = c.newEncoder();

Dá uma olhada no Javadoc e posta o resultado aqui, eu nunca precisei usar essa classe.

J

Resolvi o problema desta maneira, usando a classe Charset que você falou e a classe RandomAccessFile :slight_smile:
Abaixo segue a parte do código para a solução:

//Buffer aonde ficará armazenado os dados do arquivo, os dados serão lidos conforme o tamanho do buffer, neste caso eu estou trazendo um caracter por vez.
byte[] buffer = new buffer[1];

//Lendo o arquivo
randomAcessFile.read(buffer);

//Convertendo os dados para ISO-8859-1
String data = new String(buffer, Charset.forName("ISO-8859-1");

No método do read da classe RandomAccessFile eu preciso passar um array de bytes indicando qual vai zer o tamanho do buffer, ou seja, quantos bytes eu quero trazer por vez.
Depois é só jogar o array de bytes dentro da classe String, que ela irá converter os bytes para uma string, com o encode passado para mesma.
Valeu pela ajuda!!!

E

Valeu por postar a resolução. Em breve esse post estará na busca do google e sempre que alguém tiver o mesmo problema vai encontrar a solução.

Criado 20 de outubro de 2008
Ultima resposta 22 de out. de 2008
Respostas 7
Participantes 2