Podczas otwierania pliku do odczytu, należy wyraźnie określić kodowanie, którego chcesz użyć do odczytu pliku:
Reader r = new InputStreamReader(new FileInputStream("myfile"), StandardCharsets.UTF_8);
Następnie wartość kodowanie domyślne platformy (które można zmieniać za pomocą -Dfile.encoding
) nie ma już znaczenia.
Uwaga:
I zwykle polecam zawsze określić kodowanie wyraźnie dla każdej operacji, która jest uzależniona od standardowej lokalizacji, takich jak znak I/O. Wiele metod Java API domyślnie stosuje kodowanie platformy, co uważam za zły projekt, ponieważ często kodowanie platformy nie jest właściwe, a ponadto może się nagle zmienić (jeśli użytkownik np. Zmienia ustawienia regionalne OS), łamiąc aplikację.
Więc po prostu powiedzieć, który zawsze kodowania chcesz.
Istnieją pewne przypadki, w których kodowanie platforma jest odpowiednia (jak podczas otwierania pliku użytkownik po prostu stworzony dla ciebie), ale są one dość rzadkie.
Uwaga 2:
java.nio.charset.StandardCharsets
został wprowadzony w Javie 1.7. W starszych wersjach Javy musisz określić kodowanie wejściowe jako ciąg (ugh). Lista możliwych kodowań zależy od JVM, ale każda JVM ma co najmniej:
US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE, UTF-16.
Podobne http://stackoverflow.com/questions/361975/setting-the-default- kodowanie znaków java –