转自:
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文件中的<?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元 ...
NULL 博文链接:https://lectery.iteye.com/blog/485357
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/css" href="cd_catalog.css"?> <TITLE>Empire Burlesque <ARTIST>Bob Dylan <COUNTRY>USA <COMPANY>Columbia <PRICE>10.90 <YEAR>1985 ...
如:<?xml version="1.0" encoding="gb2312" standalone="yes"?> 文档类型声明 规定元素的结构和属性列表的取值 如:<!DOCTYPE studinfo SYSTEM "studinfo.dtd"> 2)元素 空元素 <空元素标签名 属性=...
<?xml version=/'1.0/' encoding=/'gbk/'?> <name score age >name score age <name score age >d1 61 6 <name score age >d2 72 7 <name score age >d3 83 8 <name score age >d4 49 9 ...
xml version="1.0" encoding="gb2312"?> <TestID>201603150001 爵士乐 <Name>Cecil Taylor 女 <BirthDate>1988/10/7 <IdNumber>11233219990909999X <Nation></Nation> <CardAddr>Nefertiti, The ...
Encoding support for UTF-8, UTF-16, ISO-8859-family, ASCII (all native). XPATH processing. NameSpace support. XSLT transformation and processing. File, memory, and customized input / output. Low ...
xml解析器失败时候可以尝试打开开始-运行-cmd 输入命令来进行解决
全国省区市的xml文件 encoding="utf-8
解决javax.xml jar包缺失的问题,引进javax.xml.rpc-api-1.1.1.jar
软件介绍: 一个强而有力的 XML 编辑工具,可以... 要在主窗口编辑时正确显示中文, 记得要加入 encoding="gb2312", 如 <?xml version="1.0" encoding="gb2312"?> 6. 不多讲了, 希望此汉化版对你有所帮助 :)
/// 适应用Xml:<?xml version="1.0" encoding="utf-8" ?> /// <root> /// <dns1>ns1.everdns.com</dns1> /// </root> /// /// 使用示列: /// using Serial; //引用命名空间 /// string xmlPath = ...
通过使用LoadFile( TIXML_ENCODING_LEGACY )或者LoadFile( filename, TIXML_ENCODING_LEGACY ), 你可以强制TinyXML使用Legacy模式。你也可以通过设置TIXML_DEFAULT_ENCODING = TIXML_ENCODING_LEGACY来强制一直使用...
XML越来越热,关于XML的基础教程网络上也随处可见。可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。...
有关XML的习题,主要有填空,选择,判断和编程题,包含了XML的大部分知识。每一题都有详细的答案。
<?xml version=/'1.0/' encoding=/'gbk/'?> <name score age >name score age <name score age >d1 61 6 <name score age >d2 72 7 <name score age >d3 83 8 <name score age >d4 49 9 ...
xml version="1.0" encoding="UTF-8"?> <Head> <FileVersion>010000</FileVersion> <FileLength>00000CC3</FileLength> <FileTime>20100629173405</FileTime> <KeyIndex>1</KeyIndex> </Head...
从XML读取、写入配置 许多程序在使用,向一个输入框中输入了某些信息;即使关闭了程序,当再次打开时,你仍然可以看见输入框中的信息没有消失,被...<?xml version="1.0" encoding="utf-8"?> 。。。。。。。。。。。。
使用VC解析XML的一个简单实例 <?xml version="1.0" encoding="UTF-8"?>