转自:
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的解析方式及其在Java中的应用,特别是如何使用XStream库进行JavaBean与XML之间的互转。 1. **XML解析方式** - DOM解析:Document Object Model,它一次性加载整个XML文档到内存,形成一棵树形...
脚本可以批量去除XML文件中的<?xml version=“1.0“ encoding=“utf-8“?>
xml version="1.0" encoding="UTF-8"?> <HEADER NAME="HEADERname" name_cn="头名称">标签text值 版本号 时间 地址 </HEADER> <BODY> 红豆 <RMB>10元 芋头 <RMB>100元 ...
<?xml version="1.0" encoding="GB2312"?> 宋体">这是第一段的内容! 黑体">这是第二段的内容! ``` 在这个例子中,`<font>`元素包含了三个属性:`size`(字体大小)、`color`(字体颜色)和`name`...
### XML与DataTable相互转换知识点详解 #### 一、概述 在.NET框架中,XML与`...以上就是关于`DataTable`与XML之间相互转换的详细说明,这些技术在实际开发中非常有用,能够帮助开发者更高效地处理数据转换任务。
1. **初始化XML文档**:虽然示例代码中没有显示,但通常会在转换开始时添加XML声明,如`<?xml version="1.0" encoding="UTF-8"?>`。这定义了XML文档的版本和编码方式。 2. **递归处理Map**: - 首先,获取`Map`的...
需要注意的是,在生成 XML 文件时,需要确保 XML 声明中的 encoding 属性也设置为 UTF-8,以确保 XML 文件的编码正确。否则,可能会出现字符乱码的问题。 C# 生成 XML 文件,编码为 UTF-8 方法可以满足数据交换、...
<?xml version="1.0" encoding="gb2312" ?> 水星 (地球质量为 1)">0.0553 地球日">58.65 千米">2414 (地球密度为 1)">0.983 万公里">5830 金星 (地球质量为 1)">0.815 地球日">116.75 千米">6052 ...
- 如果需要字符串形式的JSON,可以将NSData对象用`NSString`的`initWithData:encoding:`方法转为字符串。 - 注意,不是所有的字典都能转换为JSON,JSON只支持基础数据类型(如字符串、数字、布尔值、数组、字典)...
<?xml version="1.0" encoding="UTF-8"?> 张三 <age>25 ``` 现在我们来谈谈如何将XML转换回JavaBean。同样利用`JAXB`,但这次我们需要使用`Unmarshaller`。假设我们已经有了一个XML文件,我们可以这样做: ```...
二、XML转JSON的步骤 1. 解析XML:首先,我们需要将XML数据解析成一个可以操作的对象模型。在iOS中,我们可以使用NSXMLParser类来实现这个功能。NSXMLParser会逐行解析XML文档,并调用代理方法处理解析事件。 2. ...
trans.setOutputProperty(OutputKeys.ENCODING, "gb2312"); // 创建ByteArrayOutputStream,用于存储转换后的字节流 ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); // 创建StreamResult...
<?xml version="1.0" encoding="UTF-8"?> <title>PHP编程基础 张三 <year>2021 ``` 我们可以这样使用上述函数来读取并转换这个文件: ```php $xmlFile = 'example.xml'; // 假设这是上面提供的XML文件路径 $...
本资料包含的是关于XML的六套期末试卷,旨在帮助学习者深入理解和掌握XML的基本概念、语法以及实际应用。 1. XML基础: XML起源于HTML,但与HTML不同,XML是自定义的、可扩展的标记语言。它允许用户根据需要创建...
本文将详细讨论如何在C#中将XML与DataTable-DataSet进行互转。 首先,我们来看如何将DataTable对象转换为XML字符串。这个过程涉及到`DataTable.WriteXml`方法,该方法接收一个XmlWriter对象,用于将DataTable的内容...
<?xml version="1.0" encoding="utf-8"?> <procu_title>ProductInformation <productName>wrilessMouse <price>3000 <saleman>Aric <productName>actionbrod <price>200000 <saleman>jonner ``` 2....
$head = '<?xml version="1.0" encoding="gb2312" ?>' . '<channel>'; $stp = '<item><title>PHP数组生成Xml格式数据.</title><link>http://www.111cn.net</link><data>2008-02-28</data></item>'; // 循环生成多个...
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); transformer.transform(new DOMSource(doc), new StreamResult(new File("output.xml"))); ``` 2. JAXB生成:Java Architecture for XML Binding...
1. **XML声明**:用于告知解析器文档的版本信息,如`<?xml version="1.0" encoding="gb2312"?>`。 2. **元素**:XML文档的核心,包括开始标记、结束标记以及它们之间的内容。元素可以包含其他元素、文本或属性。 3. ...
<?xml version="1.0" encoding="GB2312"?> <!DOCTYPE 影片目录 [ <!ELEMENT 影片目录 (影片)+> <!ELEMENT 影片 (#PCDATA|主演|导演|出品|片长|剧情)*> <!ATTLIST 影片 类别 CDATA #REQUIRED> <!ELEMENT 导演 (#...