Encoding arquivo txt

3 respostas
F

Pessoal,
pesquisei aqui no fórum e não encontrei nada que resolvesse meu problema, então vamos lá:
preciso ler os dados de um arquivo txt, porém não sei a codificação que virá nesse arquivo, normalmente o arquivo feito por usuários windows lê UTF-8 normalmente, mas quando é UTF-16 não lê :frowning:
Preciso obter do arquivo a codificação original do mesmo para ler através do InputStream.
Então a dúvida é: como obter a codificação do arquivo?
Procurei no forum e na net e não encontrei nada :frowning:
Desde já agradeço a ajuda

3 Respostas

E

A resposta simples é “depende”.

Pode ser que o arquivo txt tenha um BOM (Byte Order Mark), que é uma sequência de 2 ou 3 bytes que indicam qual é a codificação usada. Por exemplo, no caso do UTF-8 o BOM é EF BB BF , no caso do UTF16-BE, FE FF, e no caso do UTF16-LE, FF FE . Então você abre o arquivo com um FileInputStream normal, lê esses 2 ou 3 bytes, e verifica qual é o encoding.

http://unicode.org/faq/utf_bom.html#BOM

Pode ser que o arquivo NÃO tenha o BOM (e portanto é MAU - ha ha ha).

Se ele for “MAU”, então provavelmente ele é UTF-8 ou Windows-1252 se os 2 bytes iniciais não forem EF BB ou FE FF ou FF FE. Mas pode ser UTF16-BE se o primeiro byte for 00, e UTF16-LE se o segundo byte for 00.

Para saber se um arquivo é Windows-1252 ou UTF-8 já é um pouco mais complicado. Uma maneira simples é tentar efetuar o encoding usando UTF-8; se houver erros de encoding, então ele é provavelmente Windows-1252.

F

entanglement, obrigado pela ajuda :slight_smile:
mas ainda estou tendo problemas quando o arquivo não tem o BOM (quando ele eh ‘MAU’ :lol: ), ao efetuar o encoding usando UTF-8, ou outro, nenhuma exceção é lançada, somente os dados são lidos incorretamente, o que torna difícil saber se o encoding utilizado está incorreto :cry:

Alguma solução pra este caso???

Desde já agradeço.

N

tem o jchadet … mas ele te traz uma lista de possiveis encoding que podem ser usados.

vale dar uma olhada … http://jchardet.sourceforge.net/

Criado 10 de novembro de 2009
Ultima resposta 12 de nov. de 2009
Respostas 3
Participantes 3