*、解决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="#" οnclick="[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