sexta-feira, 6 de fevereiro de 2015

Java InputStream e Encoding

Pessoal... ao ler um arquivo no Java todos os caracteres especiais (letras com acento por exemplo) ficaram desconfigurados. Ficaram assim: �

Quando eu executava no Windows funcionava perfeitamente, mas no linux ficava desconfigurado.

Isso acontecia pois eu estava lendo o arquivo dessa forma:

InputStream myInputStream = MySampleClass.class.getResourceAsStream("./MyI18nFile.properties");
List lines = org.apache.commons.io.IOUtils.readLines(myInputStream);

Para resolver tive que usar um InputStreamReader setando o encoding(charset), pois não consegui setar o encoding direto no InputStream.
Uma explicação para isso é que InputStream lê blocos de bytes, já o InputStreamReader lê blocos de chars. Não sei se é isso mesmo.

O fonte ficou assim:

InputStream myInputStream = MySampleClass.class.getResourceAsStream("./MyI18nFile.properties");
InputStreamReader myInputStreamReader = new InputStreamReader(myInputStream, Charset.forName("ISO-8859-1"));
List lines = org.apache.commons.io.IOUtils.readLines(myInputStreamReader);

Vejam que eu usei Charset.forName("ISO-8859-1"), fiz isso pois meus arquivos foram criados no windows, mas o java foi executado no linux. Se no seu caso for o contrário, talvez você tenha que usar Charset.forName("UTF-8")

Fonte: http://stackoverflow.com/questions/19317606/java-substring-broken-encoding

Abraço!!
Adriano Schmidt

Nenhum comentário:

Postar um comentário