六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 63|回复: 0

Dom4j中文编码问题

[复制链接]

升级  6.67%

12

主题

12

主题

12

主题

秀才

Rank: 2

积分
60
 楼主| 发表于 2013-1-19 04:14:25 | 显示全部楼层 |阅读模式
 
 
使用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();
 
 
 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表