灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:4076回复:0

关于JSP乱码问题(页面传值产生的乱码)

楼主#
更多 发布于:2012-09-10 19:55


在JSP的输入框中写入中文,传给后台的时候,常常会出现乱码问题:

今天看了韩顺平老师的视频,对乱码问题有了初步的认识,又经过自己的实践,把总结写出来。


产生乱码的原因:java在网络上进行传输的时候,用的是iso-8859-1的编码形式进行传输。所以,在编码和解码(得到传递值)的时候,要对应起来。。

解决方法主要有三个:

1.重新转码new String(u.getBytes("iso-8859-1"),"gb2312");
2.使用过滤器来解决[不稳定]
3.通过配置server.xml文件[不太稳定]

例 :

String userName = requset.getParameter("userName");
userName = new String(userName.getBytes("iso-8859-1"),"gb2312");

但每次都这样转,还是太麻烦了,因此可以写一个工具类,提供这个将乱码转成gb2312.
public class Tools{
//提供一个方法,将乱码转化成gb2312
public static String getNewString(String input){
String result = "";
try{
result = new String(input.getBytes("iso-8859-1"),"gb2312");
}catch(Exception e){
e.printStackTrace();
}
return result;
}


在用的时候,
String userName = request.getParameter("userName");
userName = Tools.getNewString(u);

注:在用这种方法时,后面的不一定就是gb2312,可以是gbk,utf-8.具体是哪一种,要取决于向该控制器传值的页面是哪个编码。

比如我的login.jsp中,是<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>,因此,我就得用

id = new String(id.getBytes("iso-8859-1"),"utf-8");了。。。不能犯照抄的错误呀。

第三种方法:韩老师只是说了这种方法可以解决,它自己试验时没能通过,我试验也没能通过。可能和tomcat的版本有关系 。

在tomcat的配置文件server.xml中,
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
加一个属性  URIEncoding="GBK"


喜欢0 评分0
游客

返回顶部