Tentei usar o java.io.FileReader para ler alguns arquivos de texto e convertê-los em uma string, mas descobri que o resultado está codificado incorretamente e não é legível.
Aqui está o meu ambiente:
Windows 2003, codificação do sistema operacional: CP1252
Java 5.0
Meus arquivos são codificados em UTF-8 ou CP1252 e alguns deles (arquivos em UTF-8) podem conter caracteres chineses (não latinos).
Eu uso o seguinte código para fazer o meu trabalho:
private static String readFileAsString(String filePath)
throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
FileReader reader = new FileReader(filePath);
//System.out.println(reader.getEncoding());
BufferedReader reader = new BufferedReader(reader);
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
return fileData.toString();
}
O código acima não funciona. Eu descobri que a codificação do FileReader é CP1252, mesmo que o texto seja codificado em UTF-8. Mas o JavaDoc do java.io.FileReader diz que:
Os construtores dessa classe assumem que a codificação de caracteres padrão e o tamanho padrão do buffer de bytes são adequados.
Isso significa que não sou obrigado a definir a codificação de caracteres sozinho se estiver usando o FileReader? Mas atualmente recebi dados codificados incorretamente. Qual é a maneira correta de lidar com minha situação? Obrigado.