`

关于xml里的encoding【转】

    博客分类:
  • xml
xml 
阅读更多
转自:
http://www.cnblogs.com/azol/articles/1137035.html

前同天和同事在讨论xml里的encoding属性和文件格式的关系,终于彻底的弄清楚了。
以前理解的是,xml里的encoding里定义必须与文件格式相匹配。即有这样的xml Introduction<? xml encoding="utf-8" .. ?>,那么,文件格式必须是一个utf-8文件,即文件的前两个字节要是一个utf-8头FF FE。(后来才弄清楚,FF FE不是utf-8的BOM。。就是说我的错误理解持续了相当长一段时间。。)
下面把讨论的几个阶段大概说一下。
刚开始讨论时,我很肯定的告诉他,encoding的值必须和文件格式(即BOM,BOM就是 byte order mark的缩写)相匹配,不然在解析XML时,可能会出现(比如文档含有某个UNICODE字符,而encoding或BOM指定的格式不匹配,就会出错,当时我是这样的意思),然后他又告诉我,好像不是这样,我用DELPHI创建的XML文件,没有BOM,XML里面有中文内容,encoding里指定的是UTF-8,用IE可以正常打开啊。
他在发现他所创建的XML文件没有BOM时,有个有趣的地方,就是用UE打开这类含有UNICODE字符的文件时,UE会自动在文件前面加上FF FE,使得文件可以正常显示,所以原本没有BOM的文件,在UE下的十六进制下浏览,会看到多了个BOM,这个功能可以在UE的OPTIONS里去掉的,想知道的可以自己去找找。
然后我有点大头了,怎么会这样呢,然后想啊想,突然他发了一条信息过来,内容如下:

W3C定义了三条XML解析器如何正确读取XML文件的编码的规则:
1,如果文挡有BOM(字节顺序标记,一般来说,如果保存为unicode格式,则包含BOM,ANSI则无),就定义了文件编码
2,如果没有BOM,就查看XML声明的编码属性
3,如果上述两个都没有,就假定XML文挡采用UTF-8编码

有了这三条规则,那这个规则就清楚多了。
首先,XML解析器根据文件的BOM来解析文件;如果没找到BOM,由用XML里的encoding属性指定的编码;如果xml里encoding没指定的话,就默认用utf-8来解析文档。然后又可以推出,BOM和ENCODING都有的话,则以BOM指定的为准。
啊!突然觉得有标准文档多好!虽然是那么的理所当然。
至此,终于把xml里的encoding和文件格式的关系弄懂了。虽然这篇记录只有那几百个字内容,但是我们当时在讨论的时候,总时间差不多花了2个小时。
分享到:
评论

相关推荐

    xml解析及使用XStream实现javaBean与xml之间的转换

    本篇将详细讲解XML的解析方式及其在Java中的应用,特别是如何使用XStream库进行JavaBean与XML之间的互转。 1. **XML解析方式** - DOM解析:Document Object Model,它一次性加载整个XML文档到内存,形成一棵树形...

    脚本可以批量去除XML文件中的<?xml version=“1.0“ encoding=“utf-8“?>

    脚本可以批量去除XML文件中的<?xml version=“1.0“ encoding=“utf-8“?>

    2017XML字符串转对象Object 实现工具

    xml version="1.0" encoding="UTF-8"?&gt; &lt;HEADER NAME="HEADERname" name_cn="头名称"&gt;标签text值 版本号 时间 地址 &lt;/HEADER&gt; &lt;BODY&gt; 红豆 &lt;RMB&gt;10元 芋头 &lt;RMB&gt;100元 ...

    Java实现XML文档到word文档转换

    &lt;?xml version="1.0" encoding="GB2312"?&gt; 宋体"&gt;这是第一段的内容! 黑体"&gt;这是第二段的内容! ``` 在这个例子中,`&lt;font&gt;`元素包含了三个属性:`size`(字体大小)、`color`(字体颜色)和`name`...

    XML与DataTable相互转换

    ### XML与DataTable相互转换知识点详解 #### 一、概述 在.NET框架中,XML与`...以上就是关于`DataTable`与XML之间相互转换的详细说明,这些技术在实际开发中非常有用,能够帮助开发者更高效地处理数据转换任务。

    Map转换成xml

    1. **初始化XML文档**:虽然示例代码中没有显示,但通常会在转换开始时添加XML声明,如`&lt;?xml version="1.0" encoding="UTF-8"?&gt;`。这定义了XML文档的版本和编码方式。 2. **递归处理Map**: - 首先,获取`Map`的...

    C# 生成xml文件,编码为utf-8方法

    需要注意的是,在生成 XML 文件时,需要确保 XML 声明中的 encoding 属性也设置为 UTF-8,以确保 XML 文件的编码正确。否则,可能会出现字符乱码的问题。 C# 生成 XML 文件,编码为 UTF-8 方法可以满足数据交换、...

    使用XSLT将XML文档转换成HTML文档

    &lt;?xml version="1.0" encoding="gb2312" ?&gt; 水星 (地球质量为 1)"&gt;0.0553 地球日"&gt;58.65 千米"&gt;2414 (地球密度为 1)"&gt;0.983 万公里"&gt;5830 金星 (地球质量为 1)"&gt;0.815 地球日"&gt;116.75 千米"&gt;6052 ...

    IOS XML转JSON数据

    - 如果需要字符串形式的JSON,可以将NSData对象用`NSString`的`initWithData:encoding:`方法转为字符串。 - 注意,不是所有的字典都能转换为JSON,JSON只支持基础数据类型(如字符串、数字、布尔值、数组、字典)...

    javabean 与 xml文件转换

    &lt;?xml version="1.0" encoding="UTF-8"?&gt; 张三 &lt;age&gt;25 ``` 现在我们来谈谈如何将XML转换回JavaBean。同样利用`JAXB`,但这次我们需要使用`Unmarshaller`。假设我们已经有了一个XML文件,我们可以这样做: ```...

    IOS XML类型转JSON类型

    二、XML转JSON的步骤 1. 解析XML:首先,我们需要将XML数据解析成一个可以操作的对象模型。在iOS中,我们可以使用NSXMLParser类来实现这个功能。NSXMLParser会逐行解析XML文档,并调用代理方法处理解析事件。 2. ...

    XML文档转换成字符串

    trans.setOutputProperty(OutputKeys.ENCODING, "gb2312"); // 创建ByteArrayOutputStream,用于存储转换后的字节流 ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); // 创建StreamResult...

    PHP 将 XML文件或内容直接转成数组

    &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;title&gt;PHP编程基础 张三 &lt;year&gt;2021 ``` 我们可以这样使用上述函数来读取并转换这个文件: ```php $xmlFile = 'example.xml'; // 假设这是上面提供的XML文件路径 $...

    关于xml期末6套试卷

    本资料包含的是关于XML的六套期末试卷,旨在帮助学习者深入理解和掌握XML的基本概念、语法以及实际应用。 1. XML基础: XML起源于HTML,但与HTML不同,XML是自定义的、可扩展的标记语言。它允许用户根据需要创建...

    XML与DataTable-DataSet互转(C#)

    本文将详细讨论如何在C#中将XML与DataTable-DataSet进行互转。 首先,我们来看如何将DataTable对象转换为XML字符串。这个过程涉及到`DataTable.WriteXml`方法,该方法接收一个XmlWriter对象,用于将DataTable的内容...

    xml的转化成html

    &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;procu_title&gt;ProductInformation &lt;productName&gt;wrilessMouse &lt;price&gt;3000 &lt;saleman&gt;Aric &lt;productName&gt;actionbrod &lt;price&gt;200000 &lt;saleman&gt;jonner ``` 2....

    PHP 数组与Xml转换

    $head = '&lt;?xml version="1.0" encoding="gb2312" ?&gt;' . '&lt;channel&gt;'; $stp = '&lt;item&gt;&lt;title&gt;PHP数组生成Xml格式数据.&lt;/title&gt;&lt;link&gt;http://www.111cn.net&lt;/link&gt;&lt;data&gt;2008-02-28&lt;/data&gt;&lt;/item&gt;'; // 循环生成多个...

    Java解析和生成XML

    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); transformer.transform(new DOMSource(doc), new StreamResult(new File("output.xml"))); ``` 2. JAXB生成:Java Architecture for XML Binding...

    XML与XMLSchema

    1. **XML声明**:用于告知解析器文档的版本信息,如`&lt;?xml version="1.0" encoding="gb2312"?&gt;`。 2. **元素**:XML文档的核心,包括开始标记、结束标记以及它们之间的内容。元素可以包含其他元素、文本或属性。 3. ...

    XML的研究与应用

    &lt;?xml version="1.0" encoding="GB2312"?&gt; &lt;!DOCTYPE 影片目录 [ &lt;!ELEMENT 影片目录 (影片)+&gt; &lt;!ELEMENT 影片 (#PCDATA|主演|导演|出品|片长|剧情)*&gt; &lt;!ATTLIST 影片 类别 CDATA #REQUIRED&gt; &lt;!ELEMENT 导演 (#...

Global site tag (gtag.js) - Google Analytics