XML⽂件的编码问题
这两天在项⽬处理⼀个解析编码格式为ANSI的xml⽂件时,遇到了⼀些问题,现将分析过程总结如下。
通过win7⾃带的记事本或者notepad++创建⼀个xml⽂件test_source:
<?xml version="1.0" encoding="utf-16"?>
<note>
<name>coffeecat</name>
<chn>"测试"</chn>
</note>
可以看到在xml⽂件的第⼀⾏,声明编码格式为utf-16,也就是unicode,使⽤IE浏览器打开test_source失败,
通过Ultra Edit将上述已创建的xml另存为test_ue,在保存时,显式的设置编码为utf-16,通过浏览器却能直接打开,这是为什么?
xml文件怎么打开在⽹上查阅了⼀些资料,问题可能出在xml⽂件头中声明的字符编码与实际保存⽂件的编码格式不符。
验证:
使⽤Ultra Edit将test_source和test_ue打开,并切换为⼗六进制编辑模式:
test_source:
test_ue:
其中前两位标⽰出了⽂件实际存储格式的不同,以3C 3F开头的⽂件为ANSI格式存储的⽂件,⽽以FF FE开头的⽂件是Unicode little endian格式存储的。
结论:
要成功使⽤IE浏览器打开xml⽂件,⼀定要确保xml⽂件的格式声明与实际存储格式⼀致,建议在编辑xml⽂件时,尽量使⽤Ultra Edit等专业的⼯具进⾏。如果不能确定⽂件期望的保存格式,可以将xml中的格式声明部分(encoding="utf-16")删掉,这样xml⽂件也可以在IE 浏览器中打开。(可以暂时解决问题,但不建议,可能引起的问题未知)
额外的:
在⼯作中,碰到了需要解析⼀份ANSI编码格式的xml⽂件,如上述的l,其中包含了中⽂字符。为了不影响解析的功能,⽆法通过Ultra Edit将其编码格式修改为Unicode,但是项⽬需要这份xml⽂件可以随时通过IE浏览器查看,该怎么办呢?
问题还是出在xml⽂件的格式声明上,既然实际⽂件为ANSI,与声明中的encoding="utf-16“不符,那么应该将声明的编码格式改为与ANSI⼀致的即可。既然要与包含中⽂的ANSI编码格式相符,⾃然想到了汉⼦编码字符集GB2312,将encoding="utf-16“修改为encoding="gb2312“,即可使⽤IE浏览器打开xml⽂件了。或者使⽤除了包含中⽂字符还包含繁体、⽇、韩⽂字字符的更全⾯的字符集GBK。
参考资料: