Ursache:
Inkonsistente Codierung und Decodierung führten zu verstümmelten Zeichen.
Zunächst können wir den Standardzeichensatz des Systems abrufen, indem wir java.nio.charset.Charset.defaultCharset()
aufrufen. Chinesische Windows-Systeme sind alle GBK, daher verwendet die JVM standardmäßig den GBK-Zeichensatz zum Kodieren und Dekodieren .
Verwandte Video-Lerntutorials: Java-Lehrvideo
Die größte Möglichkeit für verstümmelten Code ist inkonsistente Kodierung und Dekodierung.
// 代码片段1: byte[] read = "你好abc".getBytes(); String result = new String(read); System.out.println(result);
Es gibt 3 Schritte, um gegen diesen Code Einspruch einzulegen:
1. Dies wird hier geschrieben, um es prägnanter zu gestalten. Tatsächlich ist es dasselbe wie beim Lesen aus anderen Medien wie Dateien/Netzwerken, und welche Art von Codierung es nach dem Lesen gibt. Die Kodierungsmethode wird hier nicht angegeben, daher ist die Standardeinstellung GBK.
2. Dekodierung. Unsere letzten Operationen sind alle String-Objekte. Wir können schließlich ein String-Objekt erhalten, indem wir die Decodierungsmethode des Byte-Arrays des Strings angeben. Hier ist keine Dekodierungsmethode angegeben, daher ist GBK der Standardwert.
3. Ausgabe, Zeichenfolgen verwenden. Tatsächlich gibt es hier einen weiteren Kodierungs- und Dekodierungsprozess, dh der Ausgabestream wird in GBK kodiert, die Konsole wird in GBK dekodiert und schließlich angezeigt. Da bei der Ausgabe und Verwendung von Zeichenfolgen der Standardzeichensatz des Systems verwendet wird, besteht keine Möglichkeit einer Inkonsistenz bei der Kodierung und Dekodierung, sodass dies nicht die Ursache für verstümmelte Zeichen ist.
Angenommen, wir ändern die Kodierung des Eingabestreams:
// 代码片段2: byte[] read = "你好abc".getBytes("utf-8"); String result = new String(read); System.out.println(result);
Lassen Sie uns die drei Schritte analysieren:
1 Kodierung, utf-8; , Dekodierung, GBK.
Die Kodierung und Dekodierung sind inkonsistent, was zu verstümmelten Codes führt.
Wie man das Problem beheben kann, ist meiner Meinung nach bereits klar.
Die Reparaturmethode ist wie folgt:1 Es ist für uns im Allgemeinen schwierig, die Codierung des Eingabestreams zu steuern. Achten Sie daher beim Decodieren auf den Codierungstyp des Eingabestreams . Normalerweise sehen wir beim Aufrufen der relevanten Methoden des Eingabestreams den Parameter charset, der sich auf die Decodierungsmethode bezieht. 2. Der Ausgabestream kann auch seine Codierungsmethode verwenden, um das Ausgabeergebnis, z. B. eine Datei, zu verarbeiten, solange dies auf die Standardmethode erfolgt, kein verstümmelter Code wird generiert. Normalerweise sehen wir beim Aufrufen der relevanten Methoden des Ausgabestreams den Parameter charset, der sich auf die Codierungsmethode bezieht. Empfohlene verwandte Artikel und Tutorials: Das obige ist der detaillierte Inhalt vonZeichen in Java sind verstümmelt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!// 代码片段3:
byte[] read = "你好abc".getBytes("utf-8");
String result = new String(read,"utf-8");
System.out.println(result);