Java liest die TXT-Datei. Wenn das Codierungsformat nicht übereinstimmt, werden verstümmelte Zeichen angezeigt. Daher müssen Sie beim Lesen von TXT-Dateien die Lesekodierung festlegen. Das Codierungsformat von TXT-Dokumenten wird in den Dateiheader geschrieben. Nach dem Abrufen des Codierungsformats werden beim Lesen der Datei keine verstümmelten Zeichen erzeugt. (Empfohlen: Java-Video-Tutorial)
Java-Kodierung entspricht TXT-Kodierung:
Beispiel:
package com.lfl.attachment; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; public class TextMain { public static void main(String[] args) throws Exception { String filePath = "D:/article.txt"; // String filePath = "D:/article333.txt"; // String filePath = "D:/article111.txt"; String content = readTxt(filePath); System.out.println(content); } /** * 解析普通文本文件 流式文件 如txt * @param path * @return */ @SuppressWarnings("unused") public static String readTxt(String path){ StringBuilder content = new StringBuilder(""); try { String code = resolveCode(path); File file = new File(path); InputStream is = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(is, code); BufferedReader br = new BufferedReader(isr); // char[] buf = new char[1024]; // int i = br.read(buf); // String s= new String(buf); // System.out.println(s); String str = ""; while (null != (str = br.readLine())) { content.append(str); } br.close(); } catch (Exception e) { e.printStackTrace(); System.err.println("读取文件:" + path + "失败!"); } return content.toString(); } public static String resolveCode(String path) throws Exception { // String filePath = "D:/article.txt"; //[-76, -85, -71] ANSI // String filePath = "D:/article111.txt"; //[-2, -1, 79] unicode big endian // String filePath = "D:/article222.txt"; //[-1, -2, 32] unicode // String filePath = "D:/article333.txt"; //[-17, -69, -65] UTF-8 InputStream inputStream = new FileInputStream(path); byte[] head = new byte[3]; inputStream.read(head); String code = "gb2312"; //或GBK if (head[0] == -1 && head[1] == -2 ) code = "UTF-16"; else if (head[0] == -2 && head[1] == -1 ) code = "Unicode"; else if(head[0]==-17 && head[1]==-69 && head[2] ==-65) code = "UTF-8"; inputStream.close(); System.out.println(code); return code; } }
Hinweis: In der Methode „resolveTxt“ kann der InputStream-Stream nicht durch die Methode „readTxt“ geleitet werden. Dies führt dazu, dass die beiden Methoden dieselbe Stream-Referenz enthalten, und in der Methode „resolveTxt“ wurden drei Bytes im Stream gelesen und die Position eingegeben Der Stream wurde bereits gelesen, nicht die Startposition des Streams. Beim Einlesen von readTxt tritt IOException auf: Lesefehler.
Weitere Java-Kenntnisse finden Sie in der Spalte Java Basic Tutorial.
Das obige ist der detaillierte Inhalt vonLösung für verstümmelte Zeichen beim Lesen von TXT-Dateien in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!