一、亂碼問題分析
book.xml
<?xml version="1.0" encoding="UTF-8"?> <書架> <書> <書名 name="xxx">Java就業培訓</書名> <作者>張老師</作者> <售價>56</售價> </書> <書> <書名>JavaScript</書名> <作者>小四</作者> <售價>69</售價> </書> </書架>
保存到XML文件中,出現亂碼:
XMLWriter writer=new XMLWriter(new FileWriter("src/book.xml")); //FileWriter 查看的本地的編碼格式 writer.write(document); writer.close();
出現亂碼原因:
document對象在內存中是以"UTF-8"編碼形式存在,用FileWriter將document對象以字符流的形式寫入xml文檔默認是用本地碼表"gb2312"編碼,所以,編碼不一樣出現亂碼問題。
解決方案一:
包裝流OutputStreamWriter並給定寫入文件時所使用的編碼表
XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"),"UTF-8"));
writer.write(document);
writer.close();
解決方案二:
OutputFormat的setEncoding方法指定傳
OutputFormat format=OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8");//和文檔一致 XMLWriter writer=new XMLWriter(new FileOutputStream("src/book.xml"),format); writer.write(document); writer.close();
亂碼問題總結:
- 用字符流向文件寫入數據默認使用本地碼表即"gb2312",所以如果文件的編碼為"UTF-8",此時應該注意轉碼,否則將會出現亂碼。
- 任何對象讀入內存都是以"UTF-8"編碼的形式存在, 默認情況下XMLWriter的write方法是以"UTF-8"的編碼形式將內存中的document對象傳給文件,所以如果是字節流文件,就不需要考慮亂碼。
總之,用字符流向文件寫入數據要考慮亂碼問題,而用字節流就不必考慮亂碼問題