Javaはtxtファイルを読み込みますが、エンコード形式が合っていないと文字化けが発生します。そのため、txtファイルを読み込む際には、読み込みエンコードを設定する必要があります。 txt文書のエンコード形式はファイルのヘッダーに記述されており、プログラムではまずファイルのエンコード形式を解析する必要があり、エンコード形式を取得した後、この形式でファイルを読み込んでも文字化けは発生しません。 (推奨: java ビデオ チュートリアル )
Java エンコードと txt エンコードの対応:
例:
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; } }
注:solveTxt メソッドでは、InputStream ストリームを readTxt メソッドに渡すことはできません。これにより、2 つのメソッドが同じストリーム参照を保持することになり、resolveTxt メソッドでは、ストリーム内の 3 バイトが読み取られ、posストリーム内の はすでに読み込まれています ストリームの開始位置ではなく 3 です readTxt で読み込むと、IOException: Read Error が発生します。
Java についてさらに詳しく知りたい場合は、Java 基本チュートリアル 列に注目してください。
以上がJavaでtxtファイルを読み込む際の文字化けの解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。