XML文件编码格式和encoding属性

    这几天学习使用Xerces-C++库,在创建XML文件时,文件的编码格式和encoding属性的问题把我折磨半死。

    刚开始我很肯定的认为XML文件的编码格式和encoding的属性值是一致的。我用Xerces-C++生成了一个XML文件(只有英文),指定encoding属性是UTF-8,文件生成了以后,我就用UE打开该XML文件,想按十六进致查看一下,正常的话应该是一个字母占一个字节,可是一看吓了一跳,一个字母占了两个字节,并且文件头有两个字节的BOM(byte order mark)FF FE,这表明这是一个Unicode编码的文件(UTF-8的ROM是EF BB BF),我明明指定了encoding是UTF-8了,为什么出来的编码变成Unicode了呢?

    后来,我用VS2005创建了一个XML文件,也指定encoding属性是UTF-8,用UE打开后,出现了跟刚才同样的情况;换Eclipse,同样问题依旧出现。迷糊了,这是怎么回事?会不会是使用Xerces-C++时,有些属性之类的没设置好,导制的,可是为什么使用VS2005和Eclipse这些IDE生成的XML也是同样问题呢?

   上网搜了一下,找到了答案,说是UE自动识别功能引起的,实际测试了一下,果然是它。原来Xerces-C++、VS2005和Eclipse生成的XML里都没有BOM,但是用UE打开时,UE自动给添加转换了。晕~~~

   顺便还弄清楚了XML解析器识别XML文件编码的规则:

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

  也就是说:BOM优先级> encoding属性,如果两者都没有,则默认是UTF-8

  不算中午休息的时间这个问题困绕了我两个多小时,现在终于解决了。

  (感谢azol的文章:http://www.cnblogs.com/azol/articles/1137035.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值