異なるエンコード形式のテキストファイルを読み込む


テキストファイルの符号化問題:異なる符号化フォーマットのテキストファイルを読み込むと、文字化けしてしまう可能性があります(特にテキストに漢字がある場合).2つのテキストファイルが用意されました:test 1.txt(符号化形式:「UTF-8」)とtest 2.txt(符号化フォーマット:「ANSI」)の2つのテキストファイルに格納されているのは、「hello,中国」コードは以下の通りです.
public class ReadFile {
    public static void main(String[] args) throws IOException {
        File f1=new File("e:"+File.separator+"test1.txt");
        File f2=new File("e:"+File.separator+"test2.txt");
        String str1=FileUtils.readFileToString(f1);
        String str2=FileUtils.readFileToString(f2);
        System.out.println(str1);
        System.out.println(str2);
    }
}

出力結果:test 1テキスト内容:hello,中国test 2テキスト内容:hello�й�
test 2のテキストが漢字も読みやすい時に文字化けしているのが見えます.これは、読み取りがファイルの符号化フォーマットを説明していないためで、コード実行時にデフォルトの符号化フォーマットで解析されるため、文字化けしています(注:これは私個人の理解ですが、間違いがあればご指摘ください).コードは次のように変更されます.
public class ReadFile {
    public static void main(String[] args) throws IOException {
        File f1=new File("e:"+File.separator+"test1.txt");
        File f2=new File("e:"+File.separator+"test2.txt");
        String str1=FileUtils.readFileToString(f1,"UTF-8");  // utf-8
        String str2=FileUtils.readFileToString(f2,"gbk");    // gbk
        System.out.println("test1 :"+str1);
        System.out.println("test2 :"+str2);
    }
}

出力結果:test 1テキスト内容:hello,中国test 2テキスト内容:hello,中国
テキストファイルの内容が正しく読み込まれます.符号化フォーマットが正しい場合、依然としていくつかの文字化けしが発生することがあります.この場合、テキストファイルが保存されているときにデフォルトでBOMが追加されている可能性があります.Windowsに付属のテキストコンパイラを使用しないで、他のテキストコンパイラを選択して、符号化フォーマットにBOMが自動的に含まれることを避けることをお勧めします.