贾文潇,叶慧莉(.武昌理工学院信息工程学院,430063;.深圳市云迅通科技股份有限公司研发部,587)
Java Web开发中的乱码问题
贾文潇1,叶慧莉2
(1.武昌理工学院信息工程学院,430063;2.深圳市云迅通科技股份有限公司研发部,518172)
摘要:在进行Java Web开发的过程中,采用的编码与解码的方式不统一时,就会产生乱码问题。本文简要介绍了在J2EE平台下Java Web开发中常用的字符编码方式,并分析中文乱码产生的原因,并在此基础上针对常见的几种中文乱码问题给出相应的解决方案,使开发人员可以更方便的解决乱码问题。
关键词:中文乱码;Java Web 开发;字符编码
经过多年发展,Java技术已经成为了最卓越的应用开发平台,在移动互联网、网络计算等领域取得了成功的应用。在Java Web应用开发中,页面中显示的中文经常出现乱码情况,其原因就是组件与组件、组件与浏览器、组件与数据库之间等采用的编码方式不同,所以在应用程序运行的过程中,汪汪要经过多次字符编码之间的转换才能正常的显示,而在转换的过程中一旦设置错误就会导致中文乱码。本文从Java Web常见的编码和运行原理出发,详细介绍了Java Web开发过程中常见的中文乱码问题以及解决方案。
1.1 ISO8859-1
ISO8859-1编码属于单字节编码,是国际标准化组织内ISO/ IEC 8859的第一个8位字符集,最多能够表示的字符范围是0-255,应用于英文系列,是Java网络传输中使用的标准字符集。
1.2 UTF-8
UTF-8编码可以兼容ISO8859-1编码和Unicode编码,用1 到6个字节不等编码Unicode字符。同时UTF-8编码带有简单的校验功能,一般来说,用在网页上可以在同一页面显示中文简体繁体及其他语言。
1.3 Unicode
Unicode属于统一的字符编码标准集,可以用来表示所用语言的字符,使用2个字节或4个字节对每一个字符进行编码,但是该编码并不兼容ISO8859-1编码,可以实现跨语言、跨平台的文本转换以及处理要求,是Java语言默认的字符集。
1.4 GB2312/GBK
GB2312和GBK是国国家标准汉字信息交换用编码,专门用来表示汉子,简称国标码,属于双字节编码。其中GBK是对GB2312的扩充,能够用来同时表示繁体字和简体字,而GB2312只能够表示简体字。
为了让Java编写的程序能够在不同的语言平台运行,Java在其语言内部使用了统一的Unicode字符集来表示字符。Java源程序是先根据操作系统默认的编码方式来完成转码,并通过I/O操作得到相应的编码字节流,将其转换成UTF-8编码写入Class文件中。
当操作文件是简体中文时默认的编码格式是GBK,编译时采用GBK方式转化成Unicode,在转化成UTF-8写入到Class文件中。在原系统中不会出现乱码现象,但是一旦移动到英文系统中很可能出现中文乱码的现象,其原因就是Java采用UTF-8读取Class文件,再将Class文件转化为Unicode,在编码转换的过程中,都是通过Unicode编码来作为中介来完成的,这时造成乱码的主要原因是使用了错误的字符集解码字节流或将给定的字节流用错误的字符集解码。
3.1 页面显示乱码
在访问JSP页面或Servlet产生的页面时,如果页面上本该显示中文的地方显示为乱码,这可能是浏览器的显示不正确,也可能是后台在生成界面时其内容就是乱码。如果是浏览器问题就需要设置JSP或Servlet的属性,在对JSP设置使用page指令时,其设置如下:
〈% @ p a g e c o n t e n t T y p e =”t e x t / html”;charset=”GB2312”〉
而对于Servlet生成页面,在输出页面前调用
setContentType()方法,代码如下:
r e s p o n s e . s e t C o n t e n t T y p e (“t e x t / html;charset=GB2312”)。
3.2 用户提交数据乱码
用户数据提交有Post和Get两种方法。
(1)采用get方式提交显示乱码及解决方案
采用get或参数方式提交数据,数据是附加在URL中,默认采用ISO-8859-1的编码方式编码,此时在JSP中设置的charset无效,为了解决这种情况下的乱码,要在servlet
中添加代码:
String str=new String(request.getParameter("参数名").getBytes("ISO-8859-1"),"utf-8")。
(2)采用post方式提交显示乱码及解决方案
采用post提交方式,提交的数据是通过Http的实体内容发送给服务器的,数据根据浏览器的charset编码方式进行编码,服务器在接收的时候也需要对request设置正确的解码方式,设置的解码方式不一致就会出现乱码。
3.3 数据库中数据乱码
在JSP/Servlet与数据库进行交互时,如果JSP/Servletz、传输通道、数据库采用的编码字符集不一致就会产生乱码问题。要解决这一问题,首先确保JSP/Servlet采用的是GBK编码,确保数据库中的中文数据正常;其次确保数据库采用GBK编码,对于MySQL而言可以使用其配置向导设置数据库采用GBK编码作为默认集;最后连接MySQL数据库的连接对象上设置字符集为GBK编码,如下:
jdbc:mysql://localhost:3306/db1user=root&password= 123456&useUnicode=true&characterEncoding=GBK为连接字符串URL,其中characterEncoding=GBK是关键代码,表示连接对象采用GBK编码字符集。
本文从Java Web应用开发的字符编码理论出发,介绍常用的字符编码,并分析出现乱码的原因,并给出了详细的解决方法。综上所述,在Java Web应用开发中,处理乱码问题,首先要抓住乱码的根源,按照显示界面、接收数据、保存数据、读取数据和将数据显示给用户的顺序,逐步查找出问题的那一步,并采取相应的方法。
参考文献
[1]王子君,范学蜂,张志浩. Java编码问题研究与应用[J].计算机工程, 2002
[2]王进.基于JSP的Web开发中文乱码问题研究[J].信息系统工程,2012
[3]刘永立.Java环境下Web程序的中文乱码问题与对策[J].电脑编程技巧与维护,2011
[4]孙鑫.Java Web开发详解[M].北京:电子工业出版社,2007 [5]李响,郝静静.Java Web开发中文乱码问题的研究与解决[J].电脑知识与技术,2012
The garbage problem in the development of Web Java
Jia Wenxiao1,Ye Huili2
(1.Wuchang University of Technology Information and Engineering School,430063 2.Shenzhen cloud fast through Polytron Technologies Inc R & D department,518172)
Abstract:In Java Web development process, the use of the encoding and decoding way is not unified,will generate the code.This paper briefly introduces the J2EE platform is commonly used in Java Web development way of character encoding,and analyzes the causes of Chinese garbled,on the basis of several common Chinese garbled question for given corresponding solutions,the developer can more easily solve the problem of gibberish.
Keywords:Chinese garbled;Java Web development;A character encoding