daidalei321 发表于 2013-1-19 04:14:25

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();
 
 
 
 
页: [1]
查看完整版本: Dom4j中文编码问题