Java Web开发中中文乱码问题的分析与解决方法
作者:田娟
来源:《计算机光盘软件与应用》2013年第08期
摘要:从介绍Java 常用字符编码集入手,详细分析了在Java Web开发中产生中文乱码的原因,并针对原因提出了可行性解决方法。
关键词:Java Web开发;中文乱码;字符编码集 中图分类号:TP311.10 1引言
Java编程语言具有面向对象、可跨平台运行和分布应用等特点,因此使得Java语言成为主流的网络编程语言。而对于网络程序开发者来说,中文乱码问题是个由来已久和让人头疼的问题。探究其原因,在Java Web开发或是Web程序运行过程中,数据通常会通过Web服务器在应用程序和数据库中进行来回传输,而Web服务器,应用程序和数据库中都有可能使用不同的字符编码集,这就导致了中文乱码问题的频繁出现。本文主要介绍Java Web应用中常用字符编码集,并分析了中文乱码产生的原因以及针对原因提出可行性的解决办法。 2Java常用字符编码集
ASCII,全称为:American Standard Code for Information Interchange(美国信息互换标准代码),是一种包括数字、字母、通用符号、控制符号在内的字符编码集。ASCII码是一种7位二进制编码,能表示27=128种国际上最通用的西文字符,是目前计算机中,最普遍使用的单字节编码系统。ASCII码包括数字“0”-“9”、26个大、小写英文字母、通用字符和控制符号四类最常用的字符。ASCII码虽是一种7位编码,但它存放时必须占全一个字节,即占用8位,其最高位是0。
GB2312:为了适应计算机处理中文信息的需要,国家标准总局制定了“中华人民共和国国家标准信息交换汉字编码”,标准号为“GB 2312-1980”。这种编码称为国标码。它适用于汉字处理、汉字通信等系统之间的信息交换。基本集共收入汉字6763个和非汉字图形字符682个。在GB2312中,一个字符通常使用两个字节的数字表示,而对于每个中文字符的每一个字节来说,其最高位使用的是数字1来表示的,这也是GB2312字符编码集与ASCII码的不同之处。
龙源期刊网 http://www.qikan.com.cn
GBK:自GB2312标准之后,我国于1993年发布了GB13000标准,并在此基础上生成GBK字符集。它与GB2312完全兼容,收录了20902个简繁体汉字及符号。该标准仍然用两个字节表示一个汉字。
ISO-8859-l:全称是ISO/IEC 8859,是国际标准化组织(ISO)及国际电工委员会(IEC)联合制定的一系列8位字符集的标准,现时定义了15个字符集。它是西方国家所使用的字符编码集,其编码范围是0x00-0xFF,表示的字符范围很窄,无法表示中文字符。但是由于它是一种单字节的字符集,和计算机最基础的表示单位一致,所以在很多时候,仍然用ISO-8859-l。在此编码集中,收录的字符包括:ASCII收录的字符以及泰语、希腊语、阿拉伯语、西欧语言、希伯来语对应的文字符号。
Unicode:EBCDIC(扩展二~十进制交换码)和ASCII码所表示的字符对于使用英语和西欧地区语言的人们来说已经够用,但对于中国等亚洲国家所用的表意文字的表示则远远不够,于是就出现了Unicode码。它是一种通用的字符集,是一种16位的编码,即2个字节,能表示65000个字符或符号。因此Unicode码用于大多数的语言。它与ASCII码完全兼容。 UTF-8:全称为:Unicode Transformation Format-8bit。是UNICODE的之中变长字符编码又称万国码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如日文,韩文)。它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF-8字符集的浏览器上显示。 3中文乱码问题的产生原因
在Java Web开发中,我们用到的数据通常会通过Web服务器在应用程序和数据库中进行双向的传输,而Web服务器,应用程序和数据库中都有可能使用不同的字符编码集,从而就导致了传输过程中的乱码问题。在Java Web开发中,对中文的正确显示产生影响的方面主要有:
(1)Web服务器:在Java Web开发中
目前许多WEB服务器都是采用Tomcat,它是一个开放源代码、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器,它所默认的字符编码是ISO-8859-1。
(2)Web应用程序:在Java语言中,可以依据应用程序中所使用的字符编码标准的不同进行具体的代码设置,它内部默认采用的是Unicode编码。另外在JSP网页中,也同样可以使用代码设置数据编码标准,包括页面脚本和输出到客户端的编码。
(3)数据库环境:数据库管理系统一般都有默认使用的字符集,或在安装过程中选择使用的字符集,如MYSQL就可以在安装过程中根据需要设置使用不同的字符集。
龙源期刊网 http://www.qikan.com.cn
4中文乱码问题解决方法 (1)修改Web服务器的编码
Tomcat服务器默认的编码是ISO-8859-1,可以在Tomcat的server.xml文件中将其编码修改为中文编码。示例程序如下(加粗部分):
connectionTimeout=\"20000\" enableLookups=\"false\" acceptCount=\"100\" useBodyEncodingForURI=\"true\"
redirectPort=\"8443\" disableUploadTimeout=\"true\" URIEncoding=\"GBK\" /> (2)JSP页面中设置字符编码标准
一般情况下,在JSP页面的头部加上如下代码:
<%@ page language=\"java\" contentType=\"text/html;charset=GBK\" pageEncoding=\"GBK\"%> 以上代码中,pageEncoding和contentType两个参数的默认值都为ISO-8859-1编码,分别指编写JSP脚本时使用的编码和最终被客户所见到JSP页面的编码形式。为解决中文乱码问题,需要将以上两个参数进行分别设置。
一般情况下,Web浏览器默认使用的字符编码集是UTF-8,客户端向服务器发送请求时,若请求数据包含中文字符,则就会解析出乱码,这时可以使用request对象,在代码中添加以下脚本:
<%request.setCharacterEncoding(\"GBK\")
//设置输入数据编码即通过以上代码设置了向JSP页面输入数据时具体使用的字符编码标准,则会避免出现乱码。
另外,不同的Web服务器和不同的JDK版本,对同一JSP页面的解析可能不同,使用response对象可以设置服务器输出页面的编码格式。可以在代码中添加如下脚本: response.setContentType(\"text/html; charset=GBK\"); //设置输出数据编码%>
龙源期刊网 http://www.qikan.com.cn
解决乱码问题。
(3)修改数据库采用的字符集
在MYSQL数据库中创建数据库或者表时都需要修改MYSQL数据库管理系统默认的编码字符集Latin1。具体方法如下:
1)如果创建数据库表时使用编写代码的方式,则在创建代码后加上语句: default-character-set=GBK;
2)如果创建数据库或者表时使用工具,则在创建过程中都会出现字符集选项,此时应选择GB2312或是GBK。
另外,在读写数据库时,如果数据出现的地方全是乱码,则首先可以中止MySQL服务,接着在重新连接数据库时,在URL中加入如下代码:useUnicode=true&characterEncoding=GBK,问题就能解决了。 5结束语
综上所述,我们了解了Java Web中常用的字符编码集,并依此分析了中文乱码问题的产生原因是在开发过程中数据通过Web服务器在应用程序和数据库中进行双向的传输时由于它们所使用编码标准的不同而导致的。从而针对原因提出了解决中文乱码问题的具体方案。在实际开发过程中,应根据具体情况具体分析,弄清乱码产生的真正原因,并且对症下药,采取相应的解决方法,从根本上解决中文乱码问题。 参考文献:
[1]刘中兵.Java Web主流框架整合开发[M].北京:电子工业出版社,2007. [2]李刚.轻量级Java EE企业应用实战(第3版)[M].北京:电子工业出版社,2011. [3]聂哲.JSP Web技术实例教程[M].北京:高等教育出版社,2009.
[4]高菲.Web开发中乱码问题的研究与解决[J].科技管理研究,2010(8):124-132.
因篇幅问题不能全部显示,请点此查看更多更全内容