中文编码集用的比较多的一般是
GBK
和
GB2312
,
GBK
是
GB2312
的扩展集。国际上通用的字符集有
unicode
、
UTF-8
、
iso8859_1
等,这几个字符集使用都非常广泛,比如
java
内部使用的是
unicode
字符集,几乎所有的数据库和
web
容器内部默认编码都是
iso8859_1
,浏览器用
UTF-8
传递页面参数。
由于中文字符集和国际标准字符集的不同,所以我们在项目开发中必然面临到编码转换的问题,在
j2ee
开发中尤其如此,
java
是一个国际化、跨平台的编程语言,需要部署在不同的
os
中,并且需要和跑在不同
os
上的
db
打交道,稍有不慎就会出现乱码的问题。
下面列举一下在日常开发时可能碰到的中文乱码问题:
1、
在中文
windows
系统上部署
j2ee
,访问
jsp
页面中文显示正常,而移植到中文或者英文的操作系统上,访问页面时就出现乱码。
2、
页面上静态显示的中文没有乱码问题,而从数据库中读出来的中文在页面上显示总是乱码。
3、
在页面表单上填写汉字提交后,数据库中内容为乱码
下面分析一下原因:
1、
中文操作系统和英文操作系统中,
file.encoding
值是不一样的,比如中文
linux
上的
file.encoding
值为
gbk,
而英文
linux
上的就不是该值。
file.encoding
在
java
开发中至关重要,用编辑器编写
.java
文件会按照
file.encoding
指定的编码保存,
javac
编译
.java
文件时先把文件从
file.encoding
转换到
unicode
放入内存,然后转换为
.class
文件。
jvm
加载类时,把
.class
以
unicode
放入内存,如果该类要接受输入时,对于用户的输入,
jvm
自动把内容由
file.encoding
转码为
unicode
,然后再送给
,class
处理;反之,输出内容时,
jvm
完成从
unicode
到
file.encoding
的转换。
2、对于
JSP
文件,
WEB
容器调用
JSP
编译器,
JSP
编译器先查看
JSP
文件中是否设置有文件编码格式,如果
JSP
文件中没有设置编码格式,则
JSP
编译器调用
JDK
先把
JSP
文件用
JVM
默认的字符编码格式
(
也即
WEB
容器所在的操作系统的默认的
file.encoding)
转化为临时的
Servlet
类,然后再把它编译成
UNICODE
格式的
class
类,并保存在临时文件夹中。如果
jsp
文件中设置了编码格式,
jvm
会用该编码格式来编译JSP文件.所以当你的jsp文件中没有设置编码格式时,在中文操作系统上是没有问题的,而在e文操作系统部署中就会出现乱码。