关于JSP乱码问题(页面传值产生的乱码)
2011-11-13 21:10
477 查看
在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"
PS1:
今天修改前人代码,搞的一头雾水,还是乱码的问题:
由于在url传值时,包含了空格,所以不能直接传递了。。。在传递时,要用:
urlEncoded = java.net.URLEncoder.encode(szSearchCondition);
&SearchConditionSelf=<%=urlEncoded%>
主要是在接收时,如果里面包含了中文,又会乱码了。。。。试了一下午,终于得到答案:
if(tmpForTrans != null){
try{
String tmp = new String(tmpForTrans.getBytes("iso-8859-1"),"gb2312");
szSearchCondition = tmp;
}catch(Exception e){
e.printStackTrace();
}
System.out.println("tmpForTrans = " + tmpForTrans);
}
今天看了韩顺平老师的视频,对乱码问题有了初步的认识,又经过自己的实践,把总结写出来。
产生乱码的原因: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"
PS1:
今天修改前人代码,搞的一头雾水,还是乱码的问题:
由于在url传值时,包含了空格,所以不能直接传递了。。。在传递时,要用:
urlEncoded = java.net.URLEncoder.encode(szSearchCondition);
&SearchConditionSelf=<%=urlEncoded%>
主要是在接收时,如果里面包含了中文,又会乱码了。。。。试了一下午,终于得到答案:
if(tmpForTrans != null){
try{
String tmp = new String(tmpForTrans.getBytes("iso-8859-1"),"gb2312");
szSearchCondition = tmp;
}catch(Exception e){
e.printStackTrace();
}
System.out.println("tmpForTrans = " + tmpForTrans);
}
相关文章推荐
- 关于JSP乱码问题(页面传值产生的乱码)
- 关于JSP乱码问题(页面传值产生的乱码) .
- 关于解决客户端jsp页面向数据库传值乱码问题
- 关于jsp页面post传值汉字乱码的问题解决办法
- struts2中关于jsp页面向action传值出现乱码问题
- 关于J2EE程序servlet中中文乱码问题,jsp页面编码格式的选择
- 关于Jsp页面乱码问题解决使用过滤器和包装类处理
- 关于js传参到jsp页面乱码问题
- 解决jsp页面URL传值中文乱码问题
- 关于Struts中jsp页面上传字符参数变乱码的问题
- 关于struts2 从jsp页面获取数据乱码问题。
- jsp页面之间传值乱码问题解决
- 解决jsp页面传值乱码问题
- jsp页面向action传值乱码的问题
- JSP页面间的中文传值乱码问题,解决方案
- 关于jsp页面 title中文乱码问题的解决方法
- 关于jsp/html页面向后台传输参数时会出现乱码问题
- jsp页面向后台传值出现乱码的问题
- 关于JSP页面表单提交中文乱码问题和URL中文参数乱码问题