VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 927|回复: 9

UTF-8存储中文的问题~~乱码的问题

[复制链接]

1

主题

51

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-2-8 23:00:01 | 显示全部楼层 |阅读模式
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>
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-10 08:00:01 | 显示全部楼层
不需要new String(a.getBytes("GBK"),"UTF-8")  a就可以了  默认的输出就是utf-8
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-4-10 19:00:01 | 显示全部楼层
改成gb2312试一下
回复

使用道具 举报

0

主题

18

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-4-11 01:15:01 | 显示全部楼层
GBK
回复

使用道具 举报

1

主题

51

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
 楼主| 发表于 2020-4-15 10:00:01 | 显示全部楼层
大家看清问题...
现在要求是UTF-8
回复

使用道具 举报

1

主题

21

帖子

19.00

积分

新手上路

Rank: 1

积分
19.00
发表于 2020-4-16 19:45:01 | 显示全部楼层

    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());}

    }


回复

使用道具 举报

1

主题

51

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
 楼主| 发表于 2020-4-17 12:15:01 | 显示全部楼层
多谢LS 请问
Element newElement=root.addElement("Department")
                  .addAttribute("value",new String(a.getBytes("UTF-8"),"UTF-8"))
                      ;
为社么,解码是UTF-8?a.getBytes("UTF-8")
回复

使用道具 举报

1

主题

21

帖子

19.00

积分

新手上路

Rank: 1

积分
19.00
发表于 2020-4-19 11:15:01 | 显示全部楼层
上面的写法其实等于没写

我只想告诉你new String(a.getBytes(),"UTF-8")))导致了乱码

你首先得到汉字的unicode编码,然后将这编码当作utf-8,再次变回unicode。肯定是不行的

其实<?xml version="1.0" encoding="UTF-8"?>并非是xml本身的编码,

而是告诉让其他软件采用哪一种编码来解读

所以本地操作xml文件不需要太操心
回复

使用道具 举报

1

主题

51

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
 楼主| 发表于 2020-4-20 12:30:02 | 显示全部楼层
多谢 
回复

使用道具 举报

0

主题

3

帖子

25.00

积分

新手上路

Rank: 1

积分
25.00
发表于 2020-5-7 12:55:49 | 显示全部楼层
<?xml version="1.0" encoding="UTF-8"?> 直接就这个就应该可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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