Я намагався використовувати 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? Але я в даний час отримав неправильно закодовані дані, що є правильним способом поводження з моєю ситуацією? Дякую.