Я попытался использовать java.io.FileReader для чтения некоторых текстовых файлов и преобразования их в строку, но я обнаружил, что результат неверен и не читается вообще.
Здесь моя среда:
-
Windows 2003, кодировка ОС: CP1252
-
Java 5.0
Мои файлы кодируются в кодировке UTF-8 или CP1252, а некоторые из них (кодированные файлы UTF-8) могут содержать китайские (нелатинские) символы.
Я использую следующий код для выполнения своей работы:
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();
}
Приведенный выше код не работает. Я обнаружил, что кодировка FileReader - это CP1252, даже если текст кодируется UTF-8. Но JavaDoc java.io.FileReader говорит, что:
Конструкторы этого класса предполагают что кодировка символов по умолчанию и размер байтового байта по умолчанию равен необходимо.
Означает ли это, что мне не требуется устанавливать кодировку символов самостоятельно, если я использую FileReader? Но в последнее время я получил неверные кодированные данные, какой правильный способ справиться с моей ситуацией? Спасибо.