1. 程式人生 > >XML檔案讀寫編碼不是UTF-8的問題

XML檔案讀寫編碼不是UTF-8的問題

FileWriter和FileReader在寫、讀檔案時,使用系統當前預設的編碼方式。
在中文win下encoding基本是GB2312,在英文win下基本是ISO-8859-1。所以要建立一個UTF-8的檔案,使用FileWriter是不行的。
FileWriter和FileReader都不支援通過引數指定編碼方式,而OutputStreamWriter和InputStreamReader可以。這兩個類從名字上就可以看到是位元組流和字元流的組合,實際上也是連線兩者的橋樑。

FileReader讀取檔案的過程中,FileReader繼承了InputStreamReader,但並沒有實現父類中帶字符集引數的建構函式,所以FileReader只能按系統預設的字符集來解碼,然後在UTF-8 -> GBK -> UTF-8的過程中編碼出現損失,造成結果不能還原最初的字元。

寫檔案示例程式碼:

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path),"UTF-8");
out.write("<?xml version=/"1.0/" encoding=/"utf-8/"?><a>Hello world</a>");
out.flush();
out.close();

讀檔案示例程式碼:
FileInputStream fis = new FileInputStream(FILENAME);
InputStreamReader isr = new InputStreamReader(fis,CHARSET);
BufferedReader br = new BufferedReader(isr);
StringBuffer content = new StringBuffer();
String str2 = br.readLine();
while (str2 != null) {
    content.append(str2);
    str2 = br.readLine();
}
br.close();
isr.close();
fis.close();