JSP 中文问题解决收藏
解决中文乱码问题
作者: 文章来源: 访问次数: 次 加入时间:2006-08-19
由于近来在本站看见 N 人问中文问题,为了帮大家解决。现将解决中文问题方法列出如下,*注:并非
原创, 此乃平时用时收集*。 一、中文问题的来源 计 算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字 节编码的英文为准进行处理。随着计算机的发展,为了适应世 界其它民族的语言(当然包括我们的汉字) ,人 们提出了 UNICODE 编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,目前,大 多 数国际性的软件内部均采用 UNICODE 编码,在软件运行时,它获得本地支持系统(多数时间是操作系统) 默认支持的编码格式, 然后再将
软件内部的 UNICODE 转化为本地系统默认支持的格式显示出来。 Java 的 JDK 和 JVM 即是如此,我这里说的 JDK 是指国际版的 JDK,我们大多数程序员使用的 是国际化的 JDK 版本,以 下所有的 JDK 均指国际化的 JDK 版本。我们的汉字是双字节编码语言,为了能让
计算机处理中文,我们自己 制定的 gb2312、 GBK、GBK2K 等标准以适应计算机处理的需求。所以,大部分的操作系统为了适应我们处 理中文的需求,均定制有中文操作系统,它们采用的是 GBK,GB2312 编码格式以正确显示我们的汉字。如: 中文 Win2K 默认采用的是 GBK 编码显示, 在中文 WIN2k 中保存文件时默认采用的保存文件的 编码格式也是 GBK 的, 所有在中文 WIN2K 中保存的文件它的内部编码默认均采用 GBK 编码, 即, 注意: GBK 是在 GB2312 基础上扩充来的。 由 于 Java 语言内部采用 UNICODE 编码,所以在 JAVA 程序运行时,就存在着一个从 UNICODE 编码和对 应的操作系统及浏览器支持的编码格式转换输 入、输出的问题,这个转换过程有着一系列的步骤,如果其中 任何一步出错,则显示出来的汉字就会出是乱码,这就是我们常见的 JAVA 中文问题。 同 时, 是一个跨平台的编程语言, Java 也即我们编写的程序不仅能在中文 windows 上运行, 也能在中文 Linux 等系统上运行,同时也要求能在英文等系 统上运行(我们经常看到有人把在中文 win2k 上编写的 JAVA 程序, 移植到英文 Linux 上运行) 。这种移植操作也会带来中文问题。 还有,有人使用英文的操作系统和英文的 IE 等浏览器,来运行带中文字符的程序和浏览中文网页,它们本 身就不支持中文,也会带来中文
问题。 有,几乎所有的浏览器默认在传递参数时都是以 UTF-8 编码格式来传递,而不是按中文编码传递,所以, 传递中文参数时也会有问题,从而带来乱
码现象。 总之,以上几个方面是 JAVA 中的中文问题的主要来源,我们把以上原因造成的程序不能正确运行而产生的 问题称作:JAVA 中文问题。 2、JAVA 编码转换的详细过程 我们常见的 JAVA 程序包括以下类别: *直接在 console 上运行的类(包括可视化界面的类) *JSP 代码类(注:JSP 是 Servlets 类的变型) *Servelets 类 *EJB 类 *其它不可以直接运行的支持类 这 些类文件中,都有可能含有中文字符串,并且我们常用前三类 JAVA 程序和用户直接交互,用于输出和
输入字符,如:我们在 JSP 和 Servlet 中得到客户 端送来的字符,这些字符也包括中文字符。无论这些 JAVA 类的作用如何,这些 JAVA 程序的生命周期都是这样的: *编程人员在一定的操作系统上选择一个合适的编辑软件来实现源程序代码并以.java 扩展名保存在操作系统 中,例如我们在中文 win2k 中用记事本编辑一个 java 源程序; *编程人员用 JDK 中的 javac.exe 来编译这些
源代码,形成.class 类(JSP 文件是由容器调用 JDK 来编译的); *直接运行这些类或将这些类布署到 WEB 容器中去运行,并输出结果。 那么,在这些过程中,JDK 和 JVM 是如何将这些文件如何编码和解码并运行的呢