XML檔案讀寫編碼不是UTF-8的問題
阿新 • • 發佈:2019-02-10
FileWriter和FileReader在寫、讀檔案時,使用系統當前預設的編碼方式。
在中文win下encoding基本是GB2312,在英文win下基本是ISO-8859-1。所以要建立一個UTF-8的檔案,使用FileWriter是不行的。
FileWriter和FileReader都不支援通過引數指定編碼方式,而OutputStreamWriter和InputStreamReader可以。這兩個類從名字上就可以看到是位元組流和字元流的組合,實際上也是連線兩者的橋樑。
讀檔案示例程式碼:
在中文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();