Não consigo salvar um arquivo de texto como UTF-8.
Preciso gerar uma gramática, através de código Java, para um gerador de analisadores léxicos e sintáticos através de código Java. Estou utilizando o ANTLR como analisador e o ANTLRWorks como IDE.
O problema é que quando gero a gramática através de código Java e a abro no ANTLRWorks os caracteres acentuados aparecem bagunçados (ex.: ñ vira ñ, ç vira ç e á vira á).
O que posso fazer para gerar o texto em UTF-8 de modo que ele apareça corretamente no ANTLR, dado que essa é única codificação que ele aceita?
Eu tentei de duas maneiras. A primeira foi ler o template da gramática de um arquivo e substituir partes dela por partes geradas pelo programa. Na outra maneira eu apenas gerei a uma string via código.
Em ambos os casos tentei gravar a string em um arquivo de saída e obtive esse resultado citado acima.
Acho que pode ter algo a ver com ANSI mesmo. No Notepad++ quando formato como ANSI aparecem os caracteres estranhos. Como mudo o arquivo para codificação ANSI?
File arq = new File(Diretorio + "DADOS.TXT");
OutputStream OS = (OutputStream) new FileOutputStream(arq);
OutputStreamWriter OSW = new OutputStreamWriter(OS, "UTF8");
PrintWriter Print = new PrintWriter(OSW);
Print.println(Buffer);
Print.close();
OSW.close();
OS.close();
Esse é o código que uso para gravar setando o charset do arquivo.
Você pode escolher entre UTF8, UTF16, ISO-8859-1 e vários outros, procura sobre o tipo “charset”.
Funciona 100%;
Você tem que verificar como esta a abertura do arquivo, pois se você gravar em UTF8 e abrir o arquivo em ISO-8859-1 vai dar diferença de charset, ai gera esses caracteres estranhos.
Se você salvar um arquivo em UTF8 e abrir ele no NotePad/WordPad por exemplo ai dar dar diferença pois o padrão do Windows é ISO-8859-1.
Se você pega o arquivo em ISO e abre em UTF8 dá diferença, tem que ser ISO para ISO ou UTF8 para UTF8. Senão você tem que converter.
byte[] bytes = string.getBytes();
String stringCodificada = new String(bytes, "ISO-8859-1");
Muito obrigado! Está funcionando. Acho que cometi um engano. O UTF-8 era necessário para ler arquivos de entrada do depurador do ANTLWorks. De qualquer jeito eu precisava formatar a gramática como ISO-8859-1 mesmo.