码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA 中URL中文参数乱码的处理方法(汇总)

时间:2015-10-31 22:51:46      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

  解决输入的全角汉字或者日文在URl中乱码的问题。以下我的实现

  1.   JS代码:
  2.   function shiborikomuFw() {
  3.       var url = ‘${url08}‘;
  4.       var str = document.getElementsByName(‘fw‘);
  5.       //Str str = document.getElementsById(‘fw‘).Value;
  6.       for (var i = 0; i < str.length; i++) {
  7.       url = url + "&fw=" + encodeURI(str[i].value);
  8.       }
  9.       window.location.href = url;
  10.   }
  11.   JAVA代码:
  12.   String fw = (String) form.fw;
  13.   if (fw != null && !"".equals(fw)) 
  14.     {
  15.       try 
  16.         {
  17.           fw = new String(fw.getBytes("ISO-8859-1"),"UTF-8");
  18.           // fw = java.net.URLDecoder.decode(fw, "UTF-8");
  19.           form.fw = fw;
  20.       } 
  21.         catch (Exception e) {}
  22.   }

  这样就解决问题了,在其他情况下也会有乱码,以下转自网络的各种解决方法。做个记号,方便大家查阅。

  方法一:

  1. http://xxx.do?ptname=‘我是中国人‘
  2. String strPtname = request.getParameter("ptname");
  3. strPtname = new String(strPtname.getBytes("ISO-8859-1"), "UTF-8");

  方法二:

  1. <%@ page contentType="text/html;charset=gb2312" %>
  2. <%
  3.   //request.setCharacterEncoding("GBK");
  4.   if(request.getParameter("url")!=null)
  5.   {
  6.       str=request.getParameter("url");
  7.       str=java.net.URLDecoder.decode(str,"GB2312");
  8.       str=new String(str.getBytes("ISO-8859-1"));
  9.       out.print(str);
  10.   }
  11. %>
  12. ==================================
  13.   public String chinatoString(String str)
  14.   {
  15.       String s=str;
  16.       try
  17.       {
  18.           byte tempB[]=s.getBytes("ISO-8859-1");
  19.           s=new String(tempB);
  20.           return s;
  21.       }
  22.       catch(Exception e)
  23.       {
  24.           return s;
  25.       }
  26.   }
  27. ====================================================
  28.   function URLencode(sStr){

  29.       return escape(sStr).
  30.       replace(//+/g, ‘%2B‘).
  31.       replace(//"/g,‘%22‘).
  32.       replace(//‘/g, ‘%27‘).
  33.       replace(////g,‘%2F‘);
  34.   }

  方法三:

  如果用jstl的话,可以自己写一个el的function,调用URLEncoder.encode来编码。

  IE缺省对URL后面的参数是不编码发送的,但是tomat缺省是按ISO8859-1来进行URL解码,因此才会出现上述错误。好的做法是:

  1、在URL参数中确保用UTF-8编码之,方法可以用js函数encodeURI(),或调用自定义的el function;

  2、设置server.xml中的Connector熟悉URIEncoding="UTF-8",确保解码格式与编码格式统一;

  方法四:

  在action中,

  1. String s=request.getParameter("s");
  2. s=new String(s.getBytes("iso-8859-1"),"gbk");

  四种方法应该都没问题,我已经测试过了。

JAVA 中URL中文参数乱码的处理方法(汇总)

标签:

原文地址:http://www.cnblogs.com/kesar/p/4926364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!