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

编程utils 专栏收录该内容
13 篇文章 0 订阅

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

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

 

  • 2
    点赞
  • 0
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值