java之请求乱码

*、解决java请求乱码三步走之一

在request.getParameter("param");前需要加
request.setCharacterEncoding(charset);
在PrintWriter p = request.getWriter();前需要加
response.setCharacterEncoding(charset);

 

*、解决java请求乱码三步走之二

对于post请求第一步基本完全可以解决问题,然而get请求并不给力,所以有了第二步
String str = request.getParameter("param");
str = new String(str.getBytes("ios-8859-1"),charset);
原理解释:post请求时参数存在于消息体中,而get请求则是在uri字段中,第一步的操作的目标仅仅是消息体中的数据,所以就有了这一步
替代方案是:在tomcat的server.xml添加URIEncoding="UTF-8"解决

 

*、解决java请求乱码三步走之三(终极解决方案)-更准确来说是js解决方案,不信你往下看!

如果以上方案还不能解决问题,那你真幸运能看到第三步,哈哈,那就去除第二步的转码操作,在URI传递参数时采用encodeURI(parm)进行数据转码,从而保证正确转码
该方案不需要后台代码的操作,URI中的中文参数采用encodeURI(encodeURI(param))转码即可
eg:
请求链接:href="#" onclick="[javascript:]location.href='pp.jsp?dd='+encodeURI(encodeURI('中文乱码'))";
切记切记click中的单双引号的位置
切记切记click中的单双引号的位置
切记切记click中的单双引号的位置
获取方法:String aimDD = request.getParameter("dd");
          aimDD = java.net.URLDecoder.decode(aimDD , charset);
          这里获取时采用一次的原因是因为request在获取已经自动转过一次编码

 

*、解决java请求乱码之jsp中嵌套java代码中的url乱码,so easy!

String aimStr = java.net.URLDecoder.encode(java.net.URLDecoder.encode(aimStr,"UTF-8"),"UTF-8");
java端两次编码
原理简述:第一次编码是将汉字编码为%和数字字母
          第二次编码是对%和数字字母进行编码操作
String aimStr = java.net.URLDecoder.decode(java.net.URLDecoder.decode(aimStr,"UTF-8"),"UTF-8");
java端两次解码
原理简述:第一次解码采用“iso-8859-1”和“utf-8”其实结果一致即第一次被转为%和数字字母格式的样子
          第二次解码方能转回汉字

----------------------------------------------------------基础搭建---------------------------------------------------------------

*、浏览器默认编码

ISO-8859-1

 

*、encodeURI()的功用

JavaScript函数,默认utf-8编码
一次encodeURI:若服务端保证是utf-8编码,那么一次即可
两次encodeURI:若服务端不能保证一定用utf-8编码,那么推荐使用两次编码方式
曾在jsp访问时使用终极方案才解决《乱码问号》问题-啊哈~

 

*、java代码块涉及的编码问题的解决启发

 

http://www.cnblogs.com/shitou/archive/2011/07/04/2097427.html
 

 

 

 

 

   

   

猜你喜欢

转载自lbovinl.iteye.com/blog/2348678