DOM4J写文件出现乱码,重新编码也不行,写了个测试的 代码如下
import java.io.*;
import org.dom4j.*;
import org.dom4j.io.*;
public class Test {
public static void main(String[] args)
    {
      try{
         SAXReader reader = new SAXReader();
         Document document = reader.read("c:/Demo.txt");
         Element root = document.getRootElement();
        String a="研发部";
         Element newElement=root.addElement("Department")
                  .addAttribute("value",new String(a.getBytes(),"UTF-8"))
                      ;
        // OutputFormat format=new OutputFormat(" ",true,"GBK");
       //使用  format能解决问题但是,XML规定为UTF-8
        XMLWriter writer = new XMLWriter(
           new FileOutputStream(new File("c:/Demo.txt")));
          //new FileWriter("c:/Demo.txt"));
          //使用FileWriter并不正确,DOM4J并未转码,写第二次时会报错
                  writer.write( document );
               writer.close();
       }catch(Exception e){System.out.println(e.getMessage());}    }
}
Demo.txt
<?xml version="1.0" encoding="UTF-8"?>
<Company></Company>

解决方案 »

  1.   

    不需要new String(a.getBytes("GBK"),"UTF-8")  a就可以了  默认的输出就是utf-8
      

  2.   

    大家看清问题...分不够在加~~~现在要求是UTF-8
      

  3.   


        public static void main(String[] args)
        {
          try{
             SAXReader reader = new SAXReader();
             Document document = reader.read("c:/Demo.xml");
             Element root = document.getRootElement();
            String a="研发部";
            System.out.println(root.getText()+"1"); 
             Element newElement=root.addElement("Department")
                      .addAttribute("value",new String(a.getBytes("UTF-8"),"UTF-8"))
                          ;
            OutputFormat format=new OutputFormat(" ",true,"GBK");
           //使用  format能解决问题但是,XML规定为UTF-8
            XMLWriter writer = new XMLWriter(
               new FileOutputStream(new File("c:/Demo.xml")));
              //new FileWriter("c:/Demo.txt"));
              //使用FileWriter并不正确,DOM4J并未转码,写第二次时会报错
                      writer.write( document );
                   writer.close();
           }catch(Exception e){System.out.println(e.getMessage());}    }
      

  4.   

    多谢LS 请问
     Element newElement=root.addElement("Department")
                      .addAttribute("value",new String(a.getBytes("UTF-8"),"UTF-8"))
                          ;
    为社么,解码是UTF-8?a.getBytes("UTF-8")
      

  5.   

    上面的写法其实等于没写我只想告诉你new String(a.getBytes(),"UTF-8")))导致了乱码你首先得到汉字的unicode编码,然后将这编码当作utf-8,再次变回unicode。肯定是不行的其实<?xml version="1.0" encoding="UTF-8"?>并非是xml本身的编码,而是告诉让其他软件采用哪一种编码来解读所以本地操作xml文件不需要太操心
      

  6.   

    多谢 结帖  也谢谢 Mr.Crab 哈哈