Wenn Sie eine Datei zum Lesen öffnen, müssen Sie explizit die Codierung Sie zum Lesen der Datei verwendet werden soll angeben:
Reader r = new InputStreamReader(new FileInputStream("myfile"), StandardCharsets.UTF_8);
Dann wird der Wert der Standard-Plattform-Codierung (die Sie -Dfile.encoding
Verwendung ändern) spielt keine Rolle mehr.
Hinweis:
würde ich normalerweise empfehlen immer die Codierung explizit für jede Operation angeben, die auf dem Standardgebietsschema, wie Charakter I/O abhängt. Viele Java-API-Methoden verwenden standardmäßig die Plattformcodierung, was ich für ein schlechtes Design halte, da die Plattformcodierung oft nicht die richtige ist. Außerdem kann sie sich plötzlich ändern (wenn der Benutzer beispielsweise das Gebietsschema des Betriebssystems wechselt).
Also sagen Sie immer, welche Kodierung Sie wollen.
Es gibt einige Fälle, in denen die Plattformcodierung die richtige ist (z. B. beim Öffnen einer Datei, die der Benutzer gerade für Sie erstellt hat), aber sie sind ziemlich selten.
Anmerkung 2:
java.nio.charset.StandardCharsets
wurde in Java 1.7 eingeführt. Bei älteren Java-Versionen müssen Sie die Eingabecodierung als String (ugh) angeben. Die Liste der möglichen Kodierungen hängt von der JVM ab, aber jede JVM garantiert mindestens:
US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE, UTF-16.
Verwandte http://stackoverflow.com/questions/361975/setting-the-default- Java-Zeichencodierung –