前同天和同事在讨论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中encoding的更多相关文章

  1. web.xml 中的listener、 filter、servlet 加载顺序及其详解

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  2. Android APP 读取 AndroidManifest.xml 中的版本信息详解

    APP都会涉及到版本的问题,Android APP的版本信息保存在AndroidManifest.xml文件的顶部.如下图: 有2个属性表示,“android:versionCode”和“androi ...

  3. XML中输入特殊符号

    XML中输入特殊符号 周银辉 特殊符号比如 ™, 要在xml中使用的话, 其实和html的转码是一样的, 参考下面这个表(使用十进制编码那一列) 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十 ...

  4. android 最详细的动画大全,包括如何在代码和在XML中使用

    一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画 ...

  5. XML中的DOCTYPE属性

    一.先来两个小例子 内部dtd将standalone设为真. <?xml version="1.0" standalone="yes"?> < ...

  6. 【python】mysqlDB转xml中的编码问题

    背景:有mysql数据库,将数据从数据库中读取,并存储到xml中 采用了MySQLdb和lxml两个库 具体编码处理过程如下: . 指定mysql的编码方式 .取数据库data->判断data类 ...

  7. CSS控制XML与通过js解析xml然后通过html显示xml中的数据

    使用CSS控制XML的显示 book.css bookname{ display:block;color:Red} author{ display:block;font-style:italic} p ...

  8. web.xml中配置固定数据

    在web.xml单个servlet中配置的数据的存取 存: <servlet> <description>This is the description of my J2EE ...

  9. 在xml中使用图片资源时,设置重复图片而不是拉伸平铺

    直接把图片放入xml中时,默认会拉伸图片填充.而用下面的方法则可以实现重复图片 <?xml version="1.0" encoding="utf-8"? ...

随机推荐

  1. ejs判断变量是否为空并输出

    在ejs里输出变量如下: <%=errmsg%> 但如果errmsg变量不存在则会报错:errmsg is undefined 我们可以改为: <%=locals.errmsg || ...

  2. td标签里内容不换行

    在一些页面开发中,除自己操作外,引起换行的情况一般有: Ex一.td标签里内容长度过长引起换行: Ex二.div标签(或其他标记)里内容有文本和图片引起换行: 解决方法: 针对例子一用<nobr ...

  3. position的参考基准

    static(静态):position默认的样式:占据标准流的位置, 它会忽略top.bottom.left . right 的设置 relative(相对): 占据标准流的位置:可将其移至相对于其正 ...

  4. 错误Cannot find module 'stylus'

    vue项目中使用stylus预处理器写css语法,老是出现 Cannot find module ‘stylus’ 的错误,鼓捣了很久,包括webstorm中配置stylus的支持,安装依赖. 终于找 ...

  5. 栅格那点儿事(二)---细看Raster属性

    细看Raster属性 如果你已经看完了上一章,你已经了解了栅格数据是由一个个像元(Cell)按照行列方式构成的,每一个像元都有自己的像元值,并且这些像元值根据栅格类型的不同,可以代表反射值,或高程值, ...

  6. Java问题定位之如何借助线程堆栈进行问题分析

    在大型的应用中,线程堆栈打印出来特别多,如何从众多的信息中找到真正有用,有价值的信息,我们需要一定的技巧.本文对此详细介绍. 我们可以从三个方面分析:堆栈的局部信息,一次堆栈的统计信息,多个堆栈的对比 ...

  7. C#正则表达式获取网址的域名(IP)

    代码如下: string p = @"(http|https)://(?<domain>[^(:|/]*)"; Regex reg = new Regex(p, Reg ...

  8. Ehcache的配置与使用

    Ehcache是JAVA内制的一个缓存框架! 目的:缓解频繁读取数据库的压力; 初步配置如下: <?xml version="1.0" encoding="UTF- ...

  9. java 网络流 TCP/UDP

    一.ServerSocket java.lang.Object |-java.net.ServerSocket 有子类SSLServerSocket. 此类实现服务器套接字.服务器套接字等待请求通过网 ...

  10. UESTC 757 棋盘

    虽然是水题,但是还是很interesting的.(大概就是我最晚出这个题了... 博弈感觉就是靠yy能力啊.这题是对称性. 最后的必败态是白色格子对称的,一旦对称形成,对手怎么选,跟随就好,对手无法摆 ...