admin 管理员组文章数量: 1184232
2024年3月11日发(作者:java资料图片)
龙源期刊网
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码的不同之
处。
龙源期刊网
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就可以在安装过程中根据需要设置使用不同的字符集。
龙源期刊网
4中文乱码问题解决方法
(1)修改Web服务器的编码
Tomcat服务器默认的编码是ISO-8859-1,可以在Tomcat的文件中将其编码修
改为中文编码。示例程序如下(加粗部分):
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对象,在代码中添加以
下脚本:
<%racterEncoding("GBK")
//设置输入数据编码
即通过以上代码设置了向JSP页面输入数据时具体使用的字符编码标准,则会避免出现乱
码。
另外,不同的Web服务器和不同的JDK版本,对同一JSP页面的解析可能不同,使用
response对象可以设置服务器输出页面的编码格式。可以在代码中添加如下脚本:
tentType("text/html; charset=GBK");
//设置输出数据编码%>
龙源期刊网
解决乱码问题。
(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.
版权声明:本文标题:Java Web开发中中文乱码问题的分析与解决方法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1710164216a560379.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。