zoukankan      html  css  js  c++  java
  • XML文件乱码

    一、乱码问题分析

    book.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <书架> 
      <> 
        <书名 name="xxx">Java就业培训</书名>  
        <作者>张老师</作者> 
         <售价>56</售价> 
      </>  
      <> 
        <书名>JavaScript</书名>  
        <作者>小四</作者>  
        <售价>69</售价> 
      </> 
    </书架>

    保存到XML文件中,出现乱码:

    XMLWriter writer=new XMLWriter(new FileWriter("src/book.xml"));  //FileWriter 查看的本地的编码格式
    writer.write(document);
    writer.close();

    出现乱码原因:

    document对象在内存中是以"UTF-8"编码形式存在,用FileWriter将document对象以字符流的形式写入xml文档默认是用本地码表"gb2312"编码,所以,编码不一样出现乱码问题。

     解决方案一:

    包装流OutputStreamWriter并给定写入文件时所使用的编码表

    XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"),"UTF-8"));
    writer.write(document);
    writer.close();

     解决方案二:

    OutputFormat的setEncoding方法指定传

    OutputFormat format=OutputFormat.createPrettyPrint();
    format.setEncoding("UTF-8");//和文档一致
    XMLWriter writer=new XMLWriter(new FileOutputStream("src/book.xml"),format);
    writer.write(document);
    writer.close();

    乱码问题总结:

    1.  用字符流向文件写入数据默认使用本地码表即"gb2312",所以如果文件的编码为"UTF-8",此时应该注意转码,否则将会出现乱码。
    2.  任何对象读入内存都是以"UTF-8"编码的形式存在, 默认情况下XMLWriter的write方法是以"UTF-8"的编码形式将内存中的document对象传给文件,所以如果是字节流文件,就不需要考虑乱码。

    总之,用字符流向文件写入数据要考虑乱码问题,而用字节流就不必考虑乱码问题

  • 相关阅读:
    CodeForces
    CodeForces-1253B(贪心+模拟)
    WebFlux、Reactive编程特性
    redis-on-windows配置解释
    SpringBoot配置方式补充
    如何在 Ubuntu 20.04 上安装 Python Pip
    MySQL之1055错误
    CuckooSandbox
    Manjaro 20.0.1 Lysia 安装Googlepinyin
    Manjaro 20.0.1 Lysia 更新国内镜像源
  • 原文地址:https://www.cnblogs.com/lyjs/p/4861533.html
Copyright © 2011-2022 走看看