关面已经有两编关于编码问题的文章,汉字编码测试 [1]文章及其理论汉字编码及其相关问题 [2],现在针对unicode在xml及html里的应用再做一些测试:
-
用windows附带的文本编辑器编辑一个最简单的xml文档,取名为“中文.xml”。内容如为:<中文zZ/> 直接保存(这时记事本按默认ansi格式保存),用IE(Internet Explorer)打开该文档。IE无法处理该文档,错误信息为:
文本内容中发现无效字符。处理资源 'file:///E:/study/unicode/中文.xml' 时出错。第 1 行,位置: 2
(由于xml默认编码为unicode,所以不能正常显示非unicode编码的文档。)用UltraEdit打开该文档,可以看到编码状态为DOS, 十六进制为:3C D6 D0 CE C4 7A 5A 2F 3E 。 - 用记事本打开刚才的文档,另存为“中文utf-8.xml”,选择utf-8 方式,再用IE打开该文档,IE已经能够正常处理文XML文件了。
-
将文件“中文.xml”另存为“中文gb2312.xml”内容改为如下:
<?xml version="1.0" encoding="gb2312"?>
<中文zZ/>
再用IE打开,也能够正常处理该文档。 - 如果象使用dreamweaver, xmlspy等工具编辑时,在更改xml或html的encoding 属性时,软件会自动把文档转成相应的格式。但是在使用记事本或UltraEdit等类似工具时并没有这个自动功能。因此如果在记事本里修改上述文件“中文gb2312.xml”里的encoding属性gb2312为utf-8时,直接保存就不能用IE正确打开该文档!这也是为什么XML的代码属性encoding 一定要在最前面来保证以下所使用的是哪个代码集。
同样,用记事本打开刚才的文档,另存为“中文unicode.xml”,选择unicode 方式,再用IE打开该文档,IE也能够正常处理文XML文件了。对于unicode big endian方式也同样可以处理。