文本文件編碼問題:
在讀取不同編碼格式的文本文件,可能會出現亂碼的情況(特別是文本中有漢字的情況)。
現在準備了兩個文本文件: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