dom4j中文写入xml文件乱码的解决方式

将内存中的document对象重新写入xml文档 特别要注意乱码问题

方法1:使用OutputStreamWriter设置写入文档时所使用的编码表

  OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file),"utf-8");  
  document.write(out);  
  out.close();  

方法2:

  OutputFormat format = OutputFormat.createPrettyPrint();  
  format.setEncoding("gb2312");  
  XMLWriter writer = new XMLWriter(new FileWriter(file),format);  
  writer.write(document);  
  writer.close();

方法3:

  OutputFormat format = OutputFormat.createPrettyPrint();  
  XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(file),"utf-8"),format);  
  writer.write(document);  
  writer.close();*/ 

方法4

  OutputFormat format = OutputFormat.createPrettyPrint();  
  format.setEncoding("gb2312");  //源文档用"gb2312"编码,既不改变源文档的编码格式,又不能有乱码  
  XMLWriter writer = new XMLWriter(new FileOutputStream(file),format);  
  writer.write(document);  
  writer.close();

document对象在内存中是以"UTF-8"编码形式存在,用FileWriter将document对象以字符流的形式写入xml文档默认是用本地码表"gb2312"编码

  • 乱码问题总结:
  • 1.用字符流向文件写入数据要考虑乱码问题,而用字节流就不必考虑乱码问题
  • 用字符流向文件写入数据默认使用本地码表即"gb2312"
  • 2.任何对象读入内存都是以"UTF-8"编码的形式存在
  • 默认情况下XMLWriter的write方法是以"UTF-8"的编码形式将内存中的document对象传给FileWriter,所以要想不发生乱码问题,就要使用包装流OutputStreamWriter并给定写入文件时所使用的编码表,或者使用OutputFormat的setEncoding方法指定传给流对象时所使用的编码格式。

原文链接:dom4j的增删改查读

你可能感兴趣的:(dom4j中文写入xml文件乱码的解决方式)