[Resolvido] Caracteres bagunçados (ex.: ç vira ç e á vira á) quando salvo um arquivo do ANTLR
13 respostas
N
njava
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?
O texto gerado é gravado ou lido de algum arquivo? se for lembre de abrir/gravar o arquivo no formato UTF8, senão dá problema de codificação mesmo.
N
njava
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.
H
HenriqueBR
Coloque o código de como está lendo e gravando as strings. As vezes vc pode gravar tb com ANSI.
Tive um caso do sintegra que estava assim, só colocando ANSI funcionou corretamente.
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?
D
danielfariati
Para salvar como UTF8, você tem que criar uma variável de ambiente JAVA_TOOL_OPTIONS, com o valor -Dfile.encoding=UTF8
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%;
D
danielfariati
Ignora minha solução. A do Henrique é bem melhor. ;D
Quem sabe se eu formatar como ANSI? Como posso fazer isso?
D
danielfariati
Vou pesquisar como faz pra ANSI, mas tenta para ISO-8859-1 primeiro.
N
njava
Parece que está funcionando com " ISO-8859-1". Vou fazer mais uns testes e depois aviso.
N
njava
Não tinha visto o seu comentário antes de postar o meu anterior, mas parece que está funcionando.
H
HenriqueBR1 like
njava,
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.
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.