讀取不同編碼格式文本文件

文本文件編碼問題
在讀取不同編碼格式的文本文件,可能會出現亂碼的情況(特別是文本中有漢字的情況)。
現在準備了兩個文本文件:test1.txt(編碼格式:“UTF-8”)和test2.txt(編碼格式:“ANSI”)
兩個文本文件中存儲的均爲:“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);
    }
}

輸出結果爲:
test1文本內容:hello,中國
test2文本內容:hello���й�


可以看到test2文本在對漢字和都好讀取時出現了亂碼,這是因爲在讀取是沒有說明讀取文件的編碼格式,代碼執行時會以默認的編碼格式進行解析,所以出現了亂碼(注:這個是我個人的理解,若有錯誤,歡迎指出)。
代碼修改如下:

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);
    }
}

輸出結果爲:
test1文本內容:hello,中國
test2文本內容:hello,中國


此時讀取文本文件內容正確。
有時候我們會遇到編碼格式正確的情況下,依然會出現一些亂碼,這個時候可能會是文本文件保存的時候默認添加了BOM,建議不要使用Windows自帶的文本編譯器,而是選擇一款其他的文本編譯器,避免在編碼格式中自動包含BOM

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章