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对象传给文件,所以如果是字节流文件,就不需要考虑乱码。

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

时间: 2024-11-06 03:37:28

XML文件乱码的相关文章

从XML文件乱码问题,探寻其背后的原理(转)

由于网友反应本文图片不能显示,由于时间关系未能及时修正.请访问原文地址: 在日常开发工作中,我们经常会使用到XML,早已成为了一种标准.它的用途非常的广泛,但这些不是本文所重点讨论的. 相信大家在做开始时候经常碰到过“乱码”的问题,这是中国程序员非常头疼的问题.我一直很想深入研究关于“编码”的原理,无奈水平有限,那些枯燥的 理论(二进制,ASCII,Unicode,UTF-8,gb2312,ISO ...光这些就让我看的两眼发黑了),实在看不下去,也很难真正搞懂搞明白.望各位网友多指点.....

从XML文件乱码问题,探寻其背后的原理 (ZHUAN)

出现应用程序读取XML文件乱码的场景: 加入xml文件以<?xml version="1.0" encoding="utf-8" ?> 格式的:如果对xml文件进行修改了,其中包含中文字符的内容,另存为其他格式化时(比如unicod,ANSI)等等格式,则新保存的配置文件,程序读取时候将会出现乱码,不能正常的读取. 验证如下方法: (1).可以将XML文件拖放在IE浏览器上,会出现XML文件无法正常的在浏览器上面渲染. (2).通过Visual stud

从XML文件乱码问题,探寻其背后的原理

出现应用程序读取XML文件乱码的场景: 加入xml文件以<?xml version="1.0" encoding="utf-8" ?> 格式的:如果对xml文件进行修改了,其中包含中文字符的内容,另存为其他格式化时(比如unicod,ANSI)等等格式,则新保存的配置文件,程序读取时候将会出现乱码,不能正常的读取. 验证如下方法: (1).可以将XML文件拖放在IE浏览器上,会出现XML文件无法正常的在浏览器上面渲染. (2).通过Visual stud

boost读取utf-8编码xml文件

参照:http://www.cnblogs.com/qicosmos/p/3555668.html 解决boost读取utf-8 xml文件乱码问题. 代码如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 void io::read(const string& file) {     try     {         wifstream f(file);         locale utf8Locale(locale("chs&quo

Properties读取Properties和xml文件

package PropertyDemo; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Enumeration; import java.util.

SSH项目web.xml文件的常用配置【struts2的过滤器、spring监听器、解决Hibernate延迟加载问题的过滤器、解决中文乱码的过滤器】

配置web.xml(struts2的过滤器.spring监听器.解决Hibernate延迟加载问题的过滤器.解决中文乱码的过滤器) <!-- 解决中文乱码问题 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-c

jenkin控制台输出乱码,jenkins.xml文件设置utf-8都没有用

Jenkins控制台显示乱码 Jenkins控制台显示乱码,我们需要改两个地方,见下: 1.Jenkins系统设置中修改 点击左侧"系统管理"--右侧选择"系统设置"--"全局属性",选择第一项:Environment variables,键值对列表,点击增加: 键:LANG 值:zh.CH.UTF-8 点击保存,见下图: 2.Jenkins.xml文件修改 在Jenkins安装目录下找到jenkins.xml文件 (1)找到<argume

Word文件乱码XML

layout: default title: Word文件乱码XML category: [技术, 编码] comments: true --- 文章介绍 一个朋友写的文档因为异常关机,导致全部文件变成了xml的乱码,正好帮他解决了,感觉这些或许有些帮助,就先记录下来了. 破损文件介绍 文件破坏之后,打开全是xml格式的文档,结构如下. 恢复过程 本来WSP有自动保存机智的,一般是在C:\Users\XX\AppData\Roaming\kingsoft\office6\backup这个目录下面

DOM4j解析XML文件

1.DOM4J简介 DOM4J是 dom4j.org 出品的一个开源 XML 解析包.DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP. DOM4J 使用起来非常简单.只要你了解基本的 XML-DOM 模型,就能使用. Dom:把整个文档作为一个对象. DOM4J 最大的特色是使用大量的接口.它的主要接口都在org.dom4j里面定义: Attribute 定义了 XML 的属性. Branch 指能够包含子节点的节点.如XML元素(Eleme