【原创】tinyXML文件保存编码(UTF-8, GB2312)相关的一个问题

    说说我用tinyXML遇到的一个小问题: 用tinyXML的SaveFile方法生成的XML文件中有中文字符,初始化时声明的encodeing为utf-8,用IE打开就报错,但是记事本打开不会显示乱码。

    在网上搜了半天。这个牵涉到对于XML文件编码方式的确认,就是说怎么认定某个XML文件的编码方式,可以参见这个文档http://www.cnblogs.com/azol/articles/1137035.html,简单来说就是先看BOM,没有就看文件里写的encodeing的值,再没有就默认utf-8。所以我遇到的IE打开报错的问题就是保存时没有写BOM(tinyXML默认是不写BOM的,useMicrosoftBOM在LoadFile时被置为false),而声明了encodeing为utf-8,则保存的这个XML文件的编码格式就是utf-8。所以IE解析的时候认为XML文件是utf-8编码的,就把中文按UTF-8来解释,而实际中文的编码是GB2312(因为我在写入元素的属性或文本时没有做编码转换,我使用的是多字节字符集),自然就报错了。而为什么记事本打开不是乱码呢,那就又要涉及到记事本程序对于文本文件的编码认定,参见http://kuyur.info/blog/archives/618,简单来说就是先判断BOM,没有再依据UTF-8字符串检测算法判断是否UTF-8,如果不是则最后默认是ANSI。所以以记事本打开SaveFile方法生成的XML文件时,首先是没有写BOM的,而检测UTF-8字符串也检测不到(我设置元素文本或属性时并没有将中文转为UTF-8格式),那最后就默认的认定为ANSI(这个和GB2312什么关系搞不太清楚),总之记事本认为打开的文件编码不是UTF-8,自然就不会乱码了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值