Dom4j中文编码问题

 

 

使用Dom4j,要把一个Dom中的数据写入到文件非常简单,API如下:
   public void write(Writer writer) throws IOException;

因此,假如我们要把一个Document写入到c:\test.xml文件中,可以简单的使用下面的代码即可:
       java.io.Writer wr= new java.io.FileWrite(filename);
   doc.write(wr);
       wr.close();//注意,必须要执行close()方法,才会实现真正的写入
  
  这种用法也是Dom4j所推荐我们使用的非常简单的方法。然而,当我们的dom中包含有中文字符数据的

时候,这种方法写入的xml文档却无法使直觉打开。会提示类似如下的错误:
   org.dom4j.DocumentException: invalid byte 1 of 1-byte UTF-8 sequence (0xb2) Nested

       exception: invalid byte 1 of 1-byte UTF-8 sequence (0xb2)
       at org.dom4j.io.SAXReader.read(SAXReader.java:484)
       at org.dom4j.io.SAXReader.read(SAXReader.java:343)

  我们可以看生成的xml文件编码,内容是utf-8的,但文件格式确是ANSI的

原因分析:
  由于FileWriter默认的输出编码是ANSI编码,而Dom4j中的wirte方法提供的内容实际是以UTF-8保存

的,因此造成了包括中文字符的XML文件无法正常阅读。

解决方法:
  不能使用简单的FileWriter,而应该是使用一个能指定具体输出编码的Writer,在JDK的io包中,

OutputStreamWriter可以指定输出编码。
  正确的代码如下:
      java.io.OutputStream out=new java.io.FileOutputStream(fileName);
      java.io.Writer wr=new java.io.OutputStreamWriter(out,"UTF-8");
     doc.write(wr);
     wr.close();
     out.close();
   简化一下可以写成下面的样式:
   java.io.Writer wr=new java.io.OutputStreamWriter(new          java.io.FileOutputStream(fileName),"UTF-8");
       doc.write(wr);
       wr.close();

 

 

 

 

你可能感兴趣的:(java,jdk,C++,c,xml)