分类: 系统运维
2011-01-11 17:40:44
【题外话,By 果壳】在android上实现解析XML的时候出现了中文节点数据无法正常获取的错误。在分析XML源文件是发现,汉字使用的表示方法是“XXXX;”,即下面的第三种表示方式,所以死活解析不正确。检查该文件是发现该XML的文件头如下:
经过修正,把该文件头改为:
xml version="1.0" encoding="UTF-8" ?> |
此时,汉字按方式一存储,问题解决。
以下内容为转载,以备查阅。
WML是XML的一种应用,而XML的缺省编码是UTF-8,也就是Unicode的8位编码方式。如果不特殊说明,那么XML将认为采用的是UTF-8的编码方式。这就造成了一个问题,几乎所有的文档内容都采用了GB2312方式,数据库中也不例外。而Unicode和GB2312的编码有很大的不同,可以说根本不一样,这是造成乱码的主要原因。
任何编码方式,包括日文、韩文、希腊文、阿拉伯文等都能轻松转换成Unicode。如果使用Unicode,就可以在同一段文档中加入各种语言。虽然现有的应用软件很少采用Unicode,但Windows NT的内核却采用Unicode来处理字符。Unicode方式有两个吸引人的个性:独立且宽容。
如何解决这些问题,现在常用的有以下的四种方法。
这种方法无需多讲。如果内容可以轻易转换到UTF-8编码还需要什么呢?坏处是需要对内容要进行全面的转换,而且与现有的大多数应用不兼容。
这种方法也很简单,在编码声明时,标注采用GB2312编码方式,具体做法如:。但是并不是所有终端都支持GB2132编码,仍然会出现乱码。
笔者做开发的时候就是采用这种办法解决中文问题。当时公司采用的是Motorola公司的网关,使用Motorola L2000www、Nokia 7110和Simens 3568i进行测试。结果都十分满意。
如果使用这样的页面在Nokia WAP Toolkit上直接进行测试,将会发现Nokia WAP Toolkit将对中文进行自动编码,只是按照半个字节进行处理。因此出来之后就变成乱码了。
其思想是用ASCII字符表现更大字符集中的字符。比如要展现希腊文的小写的alpha。alpha在Unicode的编码中是945,16进制就是3B1,于是写下“α”或者“α”显示的就是小写的“α”。只需要知道汉字的Unicode编码,将其转换成“XXXX;”的形式。用ASCII编码方式,任何平台都能处理,而且HTML也支持。但是这样就增加了文件长度。
在IIS的Response Object有一个属性CharSet,按微软的说法只要这么做就行:
<% Response.Charset("UTF-8") %>
这种方法,只适用于Windows NT下IIS的ASP编程。其他的平台和Web服务器就没有如此简单的方式。