2010-11-11 3 views
18

Meine Windows-Standard-Codierung ist GBK, und meine Eclipse ist völlig utf-8 codiert.
Also eine Anwendung, die gut in meinem Eclipse läuft, stürzt ab, weil die Wörter unlesbar werden, wenn sie als JAR-Datei exportiert werden;
Ich habe die folgende Zeile in einer BAT-Datei schreibenWie erzwingen ein Jar zu verwenden (oder die jvm, die jar läuft) utf-8 anstelle der Standard-Codierung des Systems

die Anwendung auszuführen ist
start java -Dfile.encoding=utf-8 -jar xxx.jar  

Nun meine Frage, dass ich etwas in den Quellcode schreiben die Anwendung verwendet zu setzen (oder die JVM läuft in) utf-8 anstelle der Standardcodierung des Systems.

+0

Verwandte http://stackoverflow.com/questions/361975/setting-the-default- Java-Zeichencodierung –

Antwort

15

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.

+0

DANKE! Bevor ich die -Datei benutze.Ich habe die 'new String (bytes []," UTF8 ") ausprobiert;' vielleicht benutze ich sie nicht überall, so dass sie immer noch nicht funktioniert. Gerade jetzt habe ich es wieder versucht und nachgefolgt. – Aloong

+0

@Aloong: Glücklich hat es für dich gearbeitet. BTW, es ist "UTF-8", nicht "UTF8". – sleske

0

Es gibt einen anderen Weg. Wenn Sie sicher sind, wie Sie die Eingabe und Ausgabe verschlüsseln möchten, können Sie die Einstellungen speichern, bevor Sie Ihre JAR-Datei kompilieren.

Hier ist ein Beispiel für NetBeans.

Go Projekt >> Eigenschaften >> Ausführen >> VM-Optionen und -Dfile. encoding=UTF-8

Danach geben, alles in UTF-8 die Java VM jedes Mal codiert wird, gestartet wird.

(Ich denke, Eclipse-die gleiche Möglichkeit bietet. Wenn nicht, nur auf VM-Optionen Google.)

enter image description here

Verwandte Themen