Ich bin kürzlich auf ein Problem beim Lesen von Textdateien (z. B. CSV-Dateien, TXT-Dateien usw.) gestoßen, und wenn ich auf Chinesisch stoße, wird es verstümmelt. (Empfohlen: Java-Video-Tutorial)
Lesen Sie den Code wie folgt:
List<String> lines=new ArrayList<String>(); BufferedReader br = new BufferedReader(new FileReader(fileName)); String line = null; while ((line = br.readLine()) != null) { lines.add(line); } br.close();
Prinzip
Die I/O-Klassenverarbeitung von Java ist wie im gezeigt Abbildung:
Die Reader-Klasse ist die übergeordnete Klasse zum Lesen von Zeichen in Java I/O, und die InputStream-Klasse ist die übergeordnete Klasse zum Lesen von Bytes. Die InputStreamReader-Klasse ist die Brücke, die Bytes mit Zeichen verknüpft Verantwortlich für die Verarbeitung während des E/A-Prozesses. Die Konvertierung von Lesebytes in Zeichen und die spezifische Decodierung von Bytes in Zeichen werden von StreamDecoder implementiert.
Das Charset-Kodierungsformat muss vom Benutzer während des StreamDecoder-Dekodierungsprozesses angegeben werden. Beachten Sie, dass der Standardzeichensatz in der lokalen Umgebung verwendet wird, wenn Sie keinen Zeichensatz angeben. In der chinesischen Umgebung wird beispielsweise die GBK-Codierung verwendet.
Zusammenfassung: Wenn Java den Datenstrom liest, müssen Sie die Codierungsmethode des Datenstroms angeben, andernfalls wird der Standardzeichensatz in der lokalen Umgebung verwendet.
Nach der obigen Analyse lautet der geänderte Code wie folgt:
List<String> lines=new ArrayList<String>(); BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"UTF-8")); String line = null; while ((line = br.readLine()) != null) { lines.add(line); } br.close();
Für weitere Java-Kenntnisse beachten Sie bitte die Spalte Java Basic Tutorial.
Das obige ist der detaillierte Inhalt vonGründe und Lösungen für das Lesen verstümmelter chinesischer Zeichen in Java-Dateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!