热门文章
阿标在线 动力3.62HTML生成3.62网站文件说明
动力3.62整合动网7.0 SP2插
MDAC2.8 下载!
动力3.62版 防止垃圾留言
动力3.6全方位改动方法
让3.62不同频道实现不同风
把3.62首页登陆为横向代码
动易3.6首页随机FLASH修改
362首页和文章频道页图文幻
个性化修改3.6宝典
3.62轻易实现网摘功能
如何正确统计中文字数?
弹出JAVASCRIPT语法错误对
后台使“网站顶部LOGO地址
最新图片文章横向移动的修
html 生成艺术字
3.6 Sp2 Logo和Banner及广
日期值的计算
汉字转拼音
首页“图片更新”图片滚动
简体中文转换为繁体中文的
如何在css中定义链接的下划
如何在JSP中处理中文
[ 录入:阿标 | 点击数: | 更新时间:2005-3-18 12:52:00]
JSPCN主页 | 虚拟主机 | 技术文章 | 代码下载 | 技术论坛 | 我要留言 | 关于我们 | 友情链接 | 联系我们
做最专业的JSP中文网站 当前位置:首页--文章分类--JSP技术--中文问题
文章搜索:
关键字 标题 内容
JSPCN文章目录分类
图片声音 [8] JSP实例 [22]
JSP配置 [54] 上传问题 [8]
时间相关 [3] 文件操作 [58]
STRUTS [61] 中文问题 [16]
数据库 [115] JAVAMAIL [36]
开发工具 [8] JSP基础 [127]
JSP其他 [40] 教程系列 [87]
JAVABEAN [5] JAVA线程 [38]
J2ME [65] SUN [89]
Java API [20] 考试相关 [38]
APPLET [57] JAVA类 [113]
Application [6] Swing [11]
J2EE [108] 异常处理 [11]
Servlet [33] JAVA基础 [169]
JAVA实例 [56] JAVA网络 [38]
EJB [145] 声音图片 [27]
XML [80] B/S开发 [12]
B/S其他 [4] 代码收集 [6]
原子代码 [3] Jbuilder [29]
RESIN [21] JBOSS [11]
weblogic [34] eclipse [12]
Tomcat [60] sql server [4]
MYSQL [19] ORACLE [46]
邮件服务 [4] WWW服务 [2]
热点文章链接
JSP显示中文问题的解决方案 [5553]
汉字问题深入谈 [2815]
中文显示原理研究 [2104]
从汉化到国际化 [1750]
关于JSP中文问题 [1738]
Java中文问题详解 [1621]
常见问题F&Q(新手推荐) [821]
JAVA常见中文问题的解决方案 [509]
Tomcat中Java/jsp中文问题完全解决方案 [387]
关于JSP中文问题的解决方法 [360]
在Jsp程序如何解决读取或向DB写入数据时的乱码问题 [354]
如何在JSP中处理中文 [63]
JSP中文问题解决方案 [46]
JSP/Servlet 中的汉字编码问题 [28]
JSP中文留言簿 [18]
相关文章链接
如何在JSP中处理中文
作者:未知 文章来源:www.jspcn.net
访问次数: 次 加入时间:2005-01-19
如何在JSP中处理中文
在一个Web应用中经常需要向服务器传递一些参数,一般通过form向服务器发送一个POST请求。在参数中有可能包含中文信息,如用户信息登记、购物定单中的地址信息等等。参数字符串一般用本地字符集进行编码,如中文采用GB2312或GBK字符集,英文或西欧文字采用ISO8859_1字符集,但在Java程序中一律采用Unicode处理字符串,这就需要有一个编码转换的过程。不幸的是,现有的大部分Java应用服务器都是在英语国家开发出来的,由于缺乏大字符集(中文、日文、韩文等)的应用环境,这些应用服务器在处理HTTP请求参数时都存在一些中文处理的问题,也是最为困扰JSP和Servlet开发者的问题。
产生这一问题的根本原因是在HTTP请求中缺乏足够的信息来指明客户端所使用的字符集。在一个JSP页面中我们可以通过下面的伪指令来指明输出页面所使用的字符集:
JSP引擎会将上面的伪指令转换为HTTP应答的头部:
Content-Type: text/html; charset=GB2312
样输出的就是采用GB2312编码的中文页面,浏览器会正确地显示出中文。但浏览器在将form的内容POST到服务器时却没有包含charset,而且将中文内容用%xx的形式(xx是十六进制数)进行编码,例如汉字"中"的GB2312内码为0xD6D0,在HTTP请求中就变成了%D6%D0,根据RFC2616的规定,如果在HTTP请求中未指明字符集,就使用ISO8859_1编码,这样"中"字在处理时变成了两个字符,分别为´u00D6´和´u00D0´,而返回到客户端时变成了两个不可显示的字符,浏览器一般显示成´??´。
解决这一问题的传统做法是编写额外的代码来完成字符集的转换:
strOut = new String(strIn.getBytes("8859_1"), "GB2312");
strIn是未经过转换的字符串,其编码为ISO8859_1,strOut是经过转换的字符串,其编码为GB2312。
在Apusic 0.9.5版中实现了Java Servlets 2.3规范草案,其中在ServletRequest接口中新增了一个方法setCharacterEncoding(String enc),可以补上在HTTP请求中缺少的charset信息,而上面这一烦琐的转换过程就在Servlet引擎中自动完成了,而且Servlet引擎还对转换过程做了优化,提高了运行效率。下面给出一个简单的例子,大家可以做一下比较。
// 传统方式
<%@ page contentType="text/html; charset=gb2312" %>
<html>
<body>
<form method=post action=test.jsp>
<input type=text name=your_name>
</form>
<%= new String(request.getParameter("your_name").getBytes("8859_1"), "GB2312") %>
</body>
</html>
// 新的方式
<%@ page contentType="text/html; charset=gb2312" %>
<% request.setCharacterEncoding("GB2312"); %>
<html>
<body>
<form method=post action=test.jsp>
<input type=text name=your_name>
</form>
<%= request.getParameter("your_name") %>
</body>
</html>