ホームページ  >  記事  >  Java  >  Javaでtxtファイルを読み込む際の文字化けの解決策

Javaでtxtファイルを読み込む際の文字化けの解決策

尚
オリジナル
2019-11-30 09:32:086910ブラウズ

Javaでtxtファイルを読み込む際の文字化けの解決策

Javaはtxtファイルを読み込みますが、エンコード形式が合っていないと文字化けが発生します。そのため、txtファイルを読み込む際には、読み込みエンコードを設定する必要があります。 txt文書のエンコード形式はファイルのヘッダーに記述されており、プログラムではまずファイルのエンコード形式を解析する必要があり、エンコード形式を取得した後、この形式でファイルを読み込んでも文字化けは発生しません。 (推奨: java ビデオ チュートリアル )

Java エンコードと txt エンコードの対応:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。