XML文件亂碼


一、亂碼問題分析

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

亂碼問題總結:

  1.  用字符流向文件寫入數據默認使用本地碼表即"gb2312",所以如果文件的編碼為"UTF-8",此時應該注意轉碼,否則將會出現亂碼。
  2.  任何對象讀入內存都是以"UTF-8"編碼的形式存在, 默認情況下XMLWriter的write方法是以"UTF-8"的編碼形式將內存中的document對象傳給文件,所以如果是字節流文件,就不需要考慮亂碼。

總之,用字符流向文件寫入數據要考慮亂碼問題,而用字節流就不必考慮亂碼問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM