admin 管理员组文章数量: 1184232
2024年3月12日发(作者:c语言环境配置)
维普资讯
第21卷第6期
甘肃联合大学学报(自然科学版)
VoI.2l No.6
2007年l1月
Journal of Gansu Lianhe University(Natural Sciences)
NOV.2007
文章编号:1672—691X(2007)06-0075—03
J SP中文乱码问题分析及处理方法
李国禄 。
(1.大连理工大学电子与信息工程学院,辽宁大连l16024;2.青海民族学院电子工程与信息科学系,青海西宁810007)
摘要:剖析了Java语言处理中文时出现乱码现象的原因,并给出了几种方案来解决JSP中的中文显示乱码
问题.
关键词:JSP;Unicode:JDK;中文乱码
中图分类号:TP312 文献标识码:A
1 问题的提出
(3)客户端读取服务器端的输出和服务器端
读客户端的输人:Servlet需要将HTML页面内
Java语言在内部采用Unicode表示字符,
容转换为browser可接受的encoding(用con—
Unicode是用两个字节表示一个字符的字符编 tent-type指定)内容发送出去.在目前的Servlet
码.而我们通常使用的字符编码如GB2312,
的规范中,如果不指定的话,通过Web提交时输
GBK,BIG5,GB18030—2000等都是双字节字符
人的ServletRequest和输出时的ServletRe—
集,与Unicode的编码机制有很大差别.以简体中
sponse缺省都是以ISO8859—1进行编码/解码
文为例,每个ASCII字符的长度只占一个字节;
的.因此,即使服务器操作系统的语言环境是中
每个汉字字符占两个字节,以GB内码表示,这两 文,上面输人的请求仍然按英文解码成8个Uni—
个字节均大于0xA0,表示汉字所在的区和位.例 code字符,输出时仍按照英文再编码成8个字
如“汉字问题”这四个字对应的GB内码是:
节,虽然这样在浏览器端如果设置是中文能够正
BABA,D7D6.CECA,CCE2.同样是一个汉字占
确显示,但实际上读写的是“字节”.
两个字节,GB内码不但与Unicode码完全不同,
如果其中任何一步出错,则显示出来的汉字
而且也没有对应的转换规律.
就会出现乱码,因此Java中文问题产生的原因就
因此如果不指明用什么编码方式,Java只好 是字符集的不统一.Java语言的中文处理问题可
按照默认的方式进行工作了.Java程序运行时,
以归结为:如何将GB编码的字节串转换为正确
从Unicode编码和对应的操作系统及浏览器的编 的Unicode字符串.
码格式转换输人、输出.这个转化过程有着一系列
的如下步骤:
2解决方法
(1)JSP编译:Java应用服务器将根据JVM 方法1:在JSP文件中都显示进行代码转换
的file。coding值读取JSp源文件,编译生成Java
在JSp程序中加人如下语句:
源文件..再根据me.encpding值写匾文件系.统。
<%@page conten,LType一..i ̄..text/html;
(2)Java源文件被编译为class文件:这个过
charset—gb2312”%>可以保证正确显示中文字
程与一般的程序编译成class文件相同。从这里开 符.例如:
始Servlet和JSP的行就类似了,只不过Servlet
< @page contentType一“text/html;
的编译不是自动进行的。对JSp程序,对产生的
charset—gb2312”%>
Java中间文件的编译是自动进行的,在程序中直
<html>
接调用sun、tools、Javac、Main类.
<head>
收稿日期:2007—10—08.
作者简介:李国禄(1974一),男(土族),青海大通人,青海民族学院讲师,大连理工大学硕士研究生,主要从事计算机
应用研究.
维普资讯
76 甘肃联合大学学报(自然科学版) 第2l卷
<title>第一个JSP页面title>
</head>
<body>
<br>
< out.println(“这是一个简单的JSP
页面”); >
</body>
</html>
方法2:利用TOMCAT5的配置文件WEB.
XML解决中文问题在T0MCAT5的WEB.
XML文件中设置的参数可以对整个站点起作用,
因此我们在WEB.XML中设置一个filters标签,
在这个Filters中利用SetCharacterEncodingFil—
ter类来处理字符集,同时将这个类中参数enco—
ding设置为GBK.在web.xml里加入如下几行:
<filter>
<filter--name>Set Character Encoding</
filter—name>
<filter~class>filters.SetCharacterEncod—
ingFiher</fiher--class>
<init—param>
<param‘——name>encoding</param ——
name>
<param‘——value>GBK</param‘——val—-
ue>
</init—param>
</filter>
<filter--mapping>
<filter—name>Set Character Enco—
ding</fiher--name>
<url—pattern>/*</url—pattern>
</filter—mapping>
把SetCharacterEncoding Filter类上文件编
译为setCharacterEncodingFilter.class文件并存
放在你的虚拟目录下的WEB—INF\classes\filters
\目录下,如果没有filters目录,就创建一个.经过
以上设置后,重启TOMCAT,基本上可以解决
JSP中文乱码问题.
方法3:解决问题的根源在于能对GB码字节
串和Unicode码字符串进行相互转换.在
JDK1.0以上版本中,String类本身提供了转换功
能,例如:
String string a一“汉字问题中文兼容性”;
byte[]gbbyte—string a.getBytes
(“GB2312”);∥Unicode-- ̄GB
String string b—new String(gbbyte,
GB23 1 2 、) GB-- ̄Unicode
System.out.println(string b):
经过转换string b与string a内容完全一样.
实际编程时可以写成如下转换函数:
public String codeToString(String str)
{String s—str;
try
{
byte tempB[]一S.getBytes(“ISO一8859—
1");
s—new String(tempB):
return S;
)
catch(Exception e)
{
return S;
)
)
其中getBytes( )方法中的参数是要转换的
编码.例如:
< @page contentType:“text/html;
charset=gb2312” >
<%!
public String codeToString(String str)
{//处理中文字符串的函数
String s—str:
try
{
byte tempB[-]一S.getBytes(“IsO一8859
—
1”):
s—new String(tempB)
return S;
)
catch(Exception e)
{
return S;
)
)
%>
<html>
<body>
<form name=“form1”action一“chinese—
维普资讯
第6期 李国禄:JSP中文乱码问题分析及处理方法 77
StringExample1.jsp”method=“post”>
一
是对于Java程序的处理方法按我们指定的方
请输入您的姓名:
<input type=“text’’name “username”>
<input type一“submit”name一“submit”
法处理;二是把数据库默认支持的编码格式改为
GBK或GB2312.如在SQL Server2K中,可以将
数据库默认的语言设置为Simplified Chinese来
达到目的. value=“提交”>
</form ̄<br>
<
3 结论
经过对Java程序转换过程的分析,知道乱码
现象存在的根本原因是含有中文字符的字符串
(其编码格式为GBK或者GB2312)被当作别的
编码格式编码或者解码了.文中给出的方法在操
作系统为Windows Server2000,数据库为SQL
Server2000,WEB服务器为T0MCAT 5.0的环
if(request.getParameter(“username”):
==nul1)
out.println(“您没有输入姓名.”);
else
out.println(你输入的姓名为:+codeToS-
tring(request.getParameter(“username”)));
>
境下测试成功.能有效的解决JSP中的中文显示
乱码的问题.
参考文献:
[1]程凯、JsP中文问题及一套整体解决方案[J].许昌学
院学报,2006,25(5):77—80.
</body ̄
</html>
程序能正确显示输入的汉字.
方法4:读取数据库中文问题及解决方法.
对于几乎所有数据库的JDBC驱动程序,默
认的在Java程序和数据库之间传递数据都是以
1SO一8859—1为默认编码格式的,所以,程序在
[2]余海燕,郑笑飞.Java语言的中文处理问题完整解决
方案[J].中文信息学报,2000,1,t(5):57—63.
[3]王子君.范学蜂,张志浩.Java编码问题研究与应用
[j].计算机工程,2002,28(3):242—245.
向数据库内存储包含中文的数据时,JDBC首先
是把程序内部的Unicode编码格式的数据转化为
1S0—8859—1的格式,然后传递到数据库中,在
[4]JOHNLHR.Java处理中文化问题详解[EB/OL].ht—
tp://www.globebbs.com/hhs/showthread.php.
2005—01-03.
数据库保存数据时,它默认即以1S0—8859—1
保存,所以,这是为什么常常在数据库中读出的中
文数据是乱码.为避免Java程序和数据库之间数
据传递出现乱码现象,可用以下最优方法来处理:
[5]刘长生,谢强,丁秋林.Java应用中的汉字乱码问题分
析[j].计算机技术与发展,2006,16(1);158—161.
Analysis on Chinese Encoding in JSP and Its Solution
LJ G o—lu
(1.School of Information and Electronic Engineering,Dalian University of Technology,Dalian 116024,China;
2.Department of Electronic Engineering and Information Science,Qinhai University for Nationalities,Xining 810007,China)
Abstract:This article analyzes the cause for encoding in the solution for Java,and puts forward the dif—
ferent methods to solve Chinese encoding in JSP.
Key words:JSP;Unicode;jdk;Chinese encoding
版权声明:本文标题:JSP中文乱码问题分析及处理方法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1710250503a564421.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。