background image

Java 程序员:Java/JSP 中文乱码问题解决心得

自从接触 Java 和 JSP 以来,就不断与 Java 的中文乱码问题打交道,现在终于得到了彻

 

底的解决,现将我们的解决心得与大家共享。

一、Java

 

中文问题的由来

Java 的内核和 class 文件是基于 unicode 的,这使 Java 程序具有良好的跨平台性,但
也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java 和 JSP 文件本身编译时产
生的乱码问题和 Java 程序于其他媒介交互产生的乱码问题。

首先 Java(包括 JSP)源文件中很可能包含有中文,而 Java 和 JSP 源文件的保存方式是
基于字节流的,如果 Java 和 JSP 编译成 class 文件过程中,使用的编码方式与源文件的
编码不一致,就会出现乱码。基于这种乱码,建议在 Java 文件中尽量不要写中文(注释
部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK
或-ecoding gb2312 编译;对于 JSP,在文件头加上或基本上就能解决这类乱码问题。

本文要重点讨论的是第二类乱码,即 Java 程序与其他存储媒介交互时产生的乱码。很多
存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,Java 程序与这些媒介
交互时就会发生字符(char)与字节(byte)之间的转换,具体情况如下:

从页面 form 提交数据到 java

 

程序 byte->char 

从 java

 

程序到页面显示 char?>byte

从数据库到 java

 

程序 byte?>char

从 java

 

程序到数据库 char?>byte

从文件到 java

 

程序 byte->char

从 java

 

程序到文件 char->byte

从流到 java

 

程序 byte->char

从 java

 

程序到流 char->byte

如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。

 

二、解决方法

前面已经提到了 Java 程序与其他媒介交互时字符和字节的转换过程,如果这些转换过程
中容易产生乱码。解决这些乱码问题的关键在于确保转换时使用的编码方式与字节原有的