Próbowałem użyć java.io.FileReader do odczytania niektórych plików tekstowych i przekonwertowania ich na ciąg, ale okazało się, że wynik jest nieprawidłowo zakodowany i w ogóle nie jest czytelny.
Oto moje środowisko:
Windows 2003, kodowanie systemu operacyjnego: CP1252
Java 5.0
Moje pliki są zakodowane w UTF-8 lub CP1252, a niektóre z nich (pliki zakodowane w UTF-8) mogą zawierać znaki chińskie (inne niż łacińskie).
Do pracy używam następującego kodu:
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();
}
Powyższy kod nie działa. Odkryłem, że kodowanie FileReadera to CP1252, nawet jeśli tekst jest zakodowany w UTF-8. Ale JavaDoc z java.io.FileReader mówi, że:
Konstruktorzy tej klasy zakładają, że domyślne kodowanie znaków i domyślny rozmiar buforu bajtów są odpowiednie.
Czy to oznacza, że nie muszę samodzielnie ustawiać kodowania znaków, jeśli używam FileReader? Ale obecnie otrzymałem błędnie zakodowane dane. Jaki jest właściwy sposób radzenia sobie z moją sytuacją? Dzięki.