本章要点 :
1. 掌握中文乱码产生的原因
2. 学会分析和解决中文乱码问题
3. 编写过滤器解决中文问题
4. 让Tomcat支持中文文件名
5. 理解国际化和本地化
6. 编写国际化的Web应用程序
在我们利用servlet /jsp 技术开发web应用程序时候,不可避免地会遇到中文问题,本章主要介绍中文问题产生的由来,分析Java语言对字符处理的过程,提出中文问题的解决方案。最后,我们将介绍如何开发一个适合多国语言的Web应用程序。
17.1 中文乱码问题产生的由来
在计算机中,只有二进制的数据,不管数据是在内存中,还是在外部存储设备上面。对于我们所看到的字符,也是以二进制数据的形式存在的。不同字符对应二进制数的规则,就是字符的编码。字符编码的集合称为字符集。
17.1.1 常用字符集
在早期的计算机系统中,使用的字符非常少,这些字符包括26个英文字母、数字符号和一些常用符号(包括控制符号),对这些字符进行编码,用1个字节就足够了(1个字节可以表示 2^8=256种字符)。然而实际上,表示这些字符,只使用了1个字节的7位,这就是ASCII编码。
1. ASCII
ASCII (American Standard Code for Information Interchange, 美国信息互换标准代码),是基于常用的英文字符的一套电脑编码系统。每一个ASCII码与一个8位(bit) 二进制数对应。其最高位是0,相应的十进制数0 ~ 127. 例如,数字字符“0”的编码用十进制数表示就是48。 另有128个扩展的ASCII 码,最高位都是1,由一些图形和划线符号组成。ASCII 是现今最通用的单字节编码系统。
ASCII 用一个字节来表示字符,最多能够表示256种字符。随着计算机的普及,许多国家都将本地的语言符号引入到了计算机种,扩展了计算机中字符的范围,于是就出现了各种不同的字符集。
2. ISO8859-1
因为ASCII 码中缺少许多书写其他语言所需的字符,为此,可以通过指定128以后的字符来扩展ASCII码。国际标准化组织(ISO)定义了几个不同的字符集,它们是在ASCII码基础上增加了其他语言和地区需要的字符。其中最常用的ISO8859-1 ,通常叫做Latin-1. Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中0~127字符与ASCII码相同。 ISO 8859 另外定义了14个适用于不同文字的字符集(8859-2 到8859-15)。这些字符集共享ASCII码,只是每个字符集都包含了128 255 的其他字符 。
3. GB2312 和 GBK
GB2312 是中华人民共和国国家标准汉族信息交换用编码,全称<信息交换用汉字编码字符集-基本集>,标准号GB2312-80 ,是一个由中华人民共和国国家标准总局发布的关于简化汉字的编码,通行于中国大陆和新加坡,简称国标码.