防止url中出现汉字乱码

来源:互联网 发布:淘宝店铺出售多少钱 编辑:程序博客网 时间:2024/05/17 06:19

 方法一:
地址:http://hi.baidu.com/comasp/blog/item/e13e928b4eeb59d2fc1f10d8.html
做ajax传递参数的时候遇到这个异常,在网上找了N天的东西,还是没找到答案,原来我一直没发现原来是 escape带来的错误。我是这样写的

var url = "b.jsp?name=" + escape(u_name);

服务端获取:

String name=request.getParameter("name");
name=new String(name.getBytes("iso-8859-1"));
System.out.println(name);

结果老是报错:org.apache.tomcat.util.http.Parameters processParameters
警告: Parameters: Character decoding failed. Parameter skipped.
java.io.CharConversionException: isHexDigit.

我知道是字符串转换异常,可是就不知道怎么样弄好。

后来听说是escapse的问题,于是开始找资料了。终于解决了。

先把url改下:

   var url = "b.jsp?name=" +u_name;
   url=encodeURI(url);
   url=encodeURI(url);    //写一个不行。如果写一个就是????号。
                                   //写2个,则输出 %df%a4这中.

服务端获取:

String name=request.getParameter("name");
name = java.net.URLDecoder.decode(name,"UTF-8");   //这句话一定要,因为如果不写的                                                                                      //话,编码 就 是%E5%A6%88%System.out.println(name);

 


方法二:对中文的变量做两次encode() 在js中做的 在java中取出来后做解密 调用工具类StringUtil

package com.struts.util;

public class StringUtil {
public static String formatString(Object obj) {
   if (obj == null)
    return "";
   else
    return obj.toString();
}

private final static byte[] val = { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x01,
    0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F };

public static String unescape(String s) {
   StringBuffer sbuf = new StringBuffer();
   int i = 0;
   int len = s.length();
   while (i < len) {
    int ch = s.charAt(i);
    if ('A' <= ch && ch <= 'Z') {
     sbuf.append((char) ch);
    } else if ('a' <= ch && ch <= 'z') {
     sbuf.append((char) ch);
    } else if ('0' <= ch && ch <= '9') {
     sbuf.append((char) ch);
    } else if (ch == '-' || ch == '_' || ch == '.' || ch == '!'
      || ch == '~' || ch == '*' || ch == '/'' || ch == '('
      || ch == ')') {
     sbuf.append((char) ch);
    } else if (ch == '%') {
     int cint = 0;
     if ('u' != s.charAt(i + 1)) {
      cint = (cint << 4) | val[s.charAt(i + 1)];
      cint = (cint << 4) | val[s.charAt(i + 2)];
      i += 2;
     } else {
      cint = (cint << 4) | val[s.charAt(i + 2)];
      cint = (cint << 4) | val[s.charAt(i + 3)];
      cint = (cint << 4) | val[s.charAt(i + 4)];
      cint = (cint << 4) | val[s.charAt(i + 5)];
      i += 5;
     }
     sbuf.append((char) cint);
    } else {
     sbuf.append((char) ch);
    }
    i++;
   }
   return sbuf.toString();
}
}

或去google搜索:"通过JS传参数后台接收到乱码".


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Mr_Von/archive/2009/02/25/3935178.aspx

原创粉丝点击