向本地写入xml文件,出现乱码问题解决方案

文件打开看起来是UTF-8的格式,其实不是,具体解决方法在网上找了一下,采用了方案一解决问题,也同时加深了字节和字符的理解。

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对象传给文件,所以如果是字节流文件,就不需要考虑乱码。

总之,用字符流向文件写入数据要考虑乱码问题,而用字节流就不必考虑乱码问题

猜你喜欢

转载自blog.csdn.net/qq_34707991/article/details/81908205