Mam plik zakodowany jako iso-8859-1 i zawiera on znaki takie jak ô.Aplikacja Java: Nie można poprawnie odczytać pliku kodowanego izo-8859-1
Czytam ten plik z kodu java, coś jak:
File in = new File("myfile.csv");
InputStream fr = new FileInputStream(in);
byte[] buffer = new byte[4096];
while (true) {
int byteCount = fr.read(buffer, 0, buffer.length);
if (byteCount <= 0) {
break;
}
String s = new String(buffer, 0, byteCount,"ISO-8859-1");
System.out.println(s);
}
Jednak postać O jest zawsze zniekształcone, zazwyczaj drukuje jak? .
Przeczytałem na ten temat (i dowiedziałem się trochę po drodze) np.
- http://www.joelonsoftware.com/articles/Unicode.html
- http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058
- http://www.ingrid.org/java/i18n/utf-16/
ale nadal nie mogę dostać tej pracy
Co ciekawe to działa na moim komputerze lokalnym (XP), ale nie na moim Linuksie.
Sprawdziłem, że mój JDK obsługuje wymaganych zestawów znaków (są standardem, więc nie jest to niespodzianka), używając:
System.out.println(java.nio.charset.Charset.availableCharsets());
Powinienem dodać, że jestem w stanie poprawnie odczytać znaki lub oryginalny plik za pomocą mojego terminalu linuxowego, jeśli po prostu przetnę zawartość pliku – Joel
Jakie kodowanie znaków jest używane przez twój terminal? – McDowell
Co ciekawe - jeśli dodaję właściwość java środowiska wykonawczego "-Dfile.encoding = UTF16", działa ona zgodnie z oczekiwaniami, chociaż nie rozumiem, dlaczego ma to znaczenie - i nie uważam tego za rozwiązanie, ale raczej za włamanie. Nie działa z właściwością ustawioną na UTF8. – Joel