[RESOLVIDO] Leitura de caracteres especiais

6 respostas
JoaoBluSCBR

Pessoal,

To lendo um arquivo txt usando

Até aí tudo bem, ja fiz muito isso.

Mas esse arquivo tem textos com caracteres especiais, letras acentuadas.

e o estranho que quando elas são lidas na string, todas elas, vem com o valor ‘\ufffd’ (int 65533).

Ou seja, todas as letras acentuadas, mesmo diferentes entre si, vem com o mesmo valor.

Como faço para realmente ter o caractere que está no texto.

Já li todos os tópicos que envolviam caracteres especiais mas não encontrei nada que me atendesse.

Como faço para identificar o tipo de codificação usada num arquivo TXT???

Se alguem tiver uma idéia de como resolver isso, desde já agradeço.

6 Respostas

Andre_Brito

Isso acontece por causa da codificação, como você falou. Você precisa mudar a codificação na hora de criar a String, de forma que consiga pegar os acentos. Pra isso, use a ISO-8859-1.

Por exemplo:

String linha;
while ((linha = new String(br.readLine().getBytes(), "ISO-8859-1")) != null) {
	System.out.println(linha);
}

Isso aí provavelmente vai resolver seu problema.

Na próxima vez, coloque seu código entre as tags code. Pra entender como fazer isso, leia este tópico.

JoaoBluSCBR

Tentei a sua sugestão de usar o charSetName.

Aliás tentei todos que encontrei e nenhum deles funcionou.

Em alguns deles nem faz a conversão, em outros faz mas os caracteres ficam esquisitos tbm.

Mais alguma sugestão?

Andre_Brito

Ué. Coloquei uns acentos aqui e leu tranquilamente. Você pode postar umas 2, 3 linhas desse seu arquivo?

JoaoBluSCBR

Resolvido.

Era quase o que você sugeriu, só que ao invés de colocar no readLine(), tinha que colocar o charSetName no InputStreamReader

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(arq.getPath()), "ISO-8859-1")); 

while ((sLinha = br.readLine()) != null) {
Andre_Brito

Que estranho. Fiquei sem entender essa :expressionless:
De qualquer forma, o importante é que foi resolvido.

Se possível, edite o título do seu tópico e coloque um [Resolvido].

J

Obrigado João.

Resolveu o meu problema tambem

Criado 24 de junho de 2011
Ultima resposta 11 de out. de 2011
Respostas 6
Participantes 3