如何在JSP中处理中文

js|中文

如何在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>  

时间: 2024-11-30 22:51:27

如何在JSP中处理中文的相关文章

如何在JSP中结合JavaBean

js JSP网页吸引人的地方之一就是能结合JavaBean技术来扩充网页中程序的功能. JavaBean是一种Java类 (class),通过封装属性和方法成为具有某种功能或者处理某个业务的对象.JavaBean被组织成为package(数据包)以便进行管理,实际上就是把一组JavaBean一起放在某某目录中,每个类的定义前加上package某某,本例中为test.目录test必须放在系统环境CLASSPATH包含的目录下,系统才能找到其中的JavaBean.JSWDK在缺省状态下将jswdk-

技巧:JSP中处理中文乱码的详细讲解

js|技巧|中文|中文乱码 在jsp中,中文乱码常会让人心乱如麻. 对于中文处理的常见对策,在网上经常可见的主要是下面2种: <%@ page contentType="text/html;charset=gb2312" %> 或者: <% String Hi="你好"; byte[] tmpbyte=Hi.getBytes("ISO8859_1"); Hi=new String(tmpbyte); out.print(Hi);

关于JSP中,中文问题(泛指字符问题),以及常见错误调试手记

js|错误|问题|中文 关于JSP中,中文问题(泛指字符问题),以及常见错误调试手记 sports98写于2001-1-9 序言:在论坛中,生活中,工作中,有不少和我一样属于鸟级的用户,在面对着不明白的问题的时候就盲目了,多交流,多写写日记就好的多了 文章内容关于:2001-01-08日,编写/调试[用户注册程序] 编写环境:WIN2K(简体中文版) server sp2 + TOMCAT4.0 + J2SDK1.3+MYSQL4.0(alpha)检测数据库内容环境:WIN2K(简体中文版) s

sql-急!!!如何在jsp中显示一个图片集,可以左右滑动的

问题描述 急!!!如何在jsp中显示一个图片集,可以左右滑动的 我现在找到一个插件fotorama,但是不知道怎么在jsp中引用,有大神会用吗? 解决方案 图片集是javascript做的网上有现成的你可以搜Javascript图片集插件就可以了:数据库里一般存放的是图片的路径的. 如果回答对你有帮助请采纳 解决方案二: 用一张表单独存这个图片信息,然后再页面遍历,可以用li标签,左右滑动的效果,可以自己写js算,也可以网上搜现成的 解决方案三: 同意楼上意见.... 解决方案四: 真的不要用数

传值-js中的值如何在jsp中获取

问题描述 js中的值如何在jsp中获取 解决方案 success回调里面直接组合添加到你的链接里面去就好了,还是原来你的页面上有添加评论的html,你需要给链接添加上ajax返回的shareid还是什么 解决方案二: 你是要在success里获得shareId后,把这个shareId放到的href里去吗? 如果是,很简单,你在js里用jquery拿到,然后设置的href属性. 解决方案三: request.getParameter("shareId") 解决方案四: 你 shareId

如何在jsp中引用javascript变量,请高手们指教,在线等.......

问题描述 如何在jsp中引用javascript变量? 解决方案 解决方案二:<scriptlanguage="javascript"type="text/javascript">varss=1;</script><div>scriptlanguage="javascript"type="text/javascript">document.write(ss);</script&g

oracle-如何在jsp中显示保存在Oracle数据库中的图片

问题描述 如何在jsp中显示保存在Oracle数据库中的图片 把图片文件上传时,保存了图片的路径,之后想在另一个页面把图片显示出来, 总是显示不出来,而且不报错, 解决方案 路径的问题,在浏览器上访问以下你所保存的路径,看看在浏览器上能不能正确显示目标图片,如果不能说明路径有问题

jsp 绘图-如何在JSP中绘制类似方波的波形图

问题描述 如何在JSP中绘制类似方波的波形图 如何在JSP中绘制类似方波的波形图最好能就是方波 给的 数据类似于 时间和电压值 例子 如下 13:00 1 13:01 0 13:01 0 13:01 0 13:01 0 13:00 1 13:00 1 13:00 1

有没有大神知道如何在jsp中跳转到本地电脑?求指教

问题描述 有没有大神知道如何在jsp中跳转到本地电脑?求指教 我有一个路径,比如说是D盘中某个文件夹或者文件,比如说我在页面上有个a标签,我怎么样才能点击a标签进入那个文件?直接给href路径不好用,有没有大神知道怎么解决?需要下载插件之类的吗?纯在jsp中编写代码能实现吗? 解决方案 首先浏览器本身要支持文件夹浏览,IE7以后就移除了这样的功能,第三方浏览器也未必支持 如果支持,可以用 file://d/你的文件夹 定位 解决方案二: 可是如果不支持那么还没有别的方法可以用?