`
crazier9527
  • 浏览: 1014246 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

防止url中出现汉字乱码

阅读更多

方法一:
地址: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();
}
}

 

分享到:
评论

相关推荐

    struts下的汉字乱码问题

    在Struts框架中,汉字乱码问题是一个常见的问题,特别是在处理中文输入时。解决这个问题涉及到多个层面,包括页面编码设置、服务器配置以及Struts的Servlet配置。以下是对这些问题的详细解释: 1. 页面编码设置: ...

    彻底解决中文乱码的问题

    通过以上方法,我们可以有效地防止和解决Java中的中文乱码问题。然而,每个具体问题可能需要针对性的解决方案,因此在实际工作中,了解并熟练掌握字符编码原理,结合具体情况调整代码,才能真正做到“彻底解决中文...

    java中文乱码解决之道(8)解决URL中文乱码问题Jav

    然而,如果在编码和解码过程中没有正确处理,中文字符就可能出现乱码。 1. **URL编码**:在Java中,我们可以使用`java.net.URLEncoder.encode()`方法对URL中的参数进行编码。但默认情况下,这个方法使用的是ISO-...

    TeraData 驱动+乱码处理

    1. **配置文件说明**:在提供的"乱码处理.txt"文件中,应该包含了如何配置TeraData驱动以适应中文字符集的指导。这可能包括设置JDBC连接URL中的字符集参数,例如`useUnicode=true`和`characterEncoding=UTF-8`。确保...

    destoon网站转移服务器后搜索汉字出现乱码的解决方法

    标题中的“destoon网站转移服务器后搜索汉字出现乱码的解决方法”主要涉及的问题是网站在迁移过程中出现的编码不兼容问题,特别是针对中文字符的显示。Destoon是一款基于PHP和MySQL开发的企业建站系统,当它从一个...

    java 用HttpsURLConnection进行传递中文时错误总结

    4. **URL编码**:对于GET请求,URL中的参数可能需要进行URL编码,防止特殊字符引起解析问题。使用`URLEncoder.encode()`方法: ```java String encodedParam = URLEncoder.encode("中文参数", "UTF-8"); String ...

    java中常见的中文乱码总结

    Java 中文乱码是指在 Java 应用程序中出现的中文字符显示不正确的问题。这种问题的出现是由于编码方式的不同引起的。下面我们将详细介绍 Java 中文乱码的原因、解决方法和防止乱码的技巧。 一、乱码现象产生的原因 ...

    读取网页源码(不会出现网页乱码)

    本节将详细介绍如何正确地读取网页源码,避免出现乱码,并特别关注在处理压缩文件格式时的源代码读取。 首先,我们需要了解网页源码的获取方式。在Java中,我们可以使用`java.net.URL`和`java.io.InputStreamReader...

    struts 2中文汉字传值

    这样做是为了防止中文字符在URL中引发的编码问题。 7. **异常处理**:在编码和解码过程中,应处理可能出现的异常,例如`java.io.IOException`,通过捕获`Exception`并打印堆栈跟踪,可以确保在出现问题时有适当的...

    中文乱码解决方法(已验证).docx

    2. 通用策略:确保服务器、客户端(浏览器)、数据库等所有环节的字符编码一致,避免在数据传输过程中出现乱码。 总结,处理中文乱码问题的关键在于理解编码和解码的过程,以及在各个层次(如服务器、浏览器、...

    伪静态URL中文乱码问题解决方法

    伪静态URL中文乱码问题通常出现在Web服务器使用了URL重写规则来模拟静态文件结构时,尤其是在使用如ISAPI_Rewrite这类工具时。在Web开发中,伪静态指的是动态网站通过URL重写技术,将动态请求映射成像静态文件一样的...

    ASP.NET中Request.Form中文乱码的解决方法

    描述中提到,开发人员最初认为只有`Request.QueryString`在处理URL查询字符串时可能出现中文乱码,而忽略了`Request.Form`同样可能遇到类似问题。事实上,当表单以POST方式提交时,表单数据通过HTTP请求体发送,这...

    中文乱码解决方案参考.pdf

    中文乱码问题在IT行业中是常见的困扰,尤其是在Web开发中。本文主要探讨了在使用Tomcat作为servlet容器,浏览器包括Firefox和IE6时,如何处理中文乱码问题。问题的核心在于字符编码的统一和正确转换。 首先,为了...

    jsp课后习题第4章.docx

    在处理包含汉字的表单提交信息时,为了正确获取汉字,需要在JSP页面中设置字符编码。例如,使用`request.setCharacterEncoding("gb2312")`来设定请求的编码为GB2312,确保汉字能被正确解析。 禁用缓存功能是防止...

    汉字编码转换器-对文字进行各种编码的工具

    - 网页开发:处理包含中文字符的URL,防止乱码。 - 文件读写:处理不同编码格式的文本文件,确保内容正确显示。 - 通信协议:在不同编码标准之间转换,保证数据交换的准确无误。 7. **使用方法**:用户只需打开...

    JSP乱码终极攻略和AJAX初步运用

    这样,URL中的UTF-8编码中文参数会被正确处理,避免出现乱码。 此外,对于AJAX请求,还可以考虑使用POST方式传递数据,而不是GET方式,因为POST方式可以携带更多数据且不会出现在URL中,从而避免了URL编码带来的...

    JSP乱码解决大全.doc

    在JSP开发中,中文乱码是一个常见的问题,尤其是在处理用户输入、页面显示以及与数据库交互时。以下是一些关于如何解决JSP中中文乱码...通过理解这些原理和实践中的技巧,可以有效地防止和解决JSP开发中的乱码问题。

    CentOS 下中文文件名显示乱码问题

    在Linux系统中,特别是使用CentOS时,经常遇到的一个问题是在Windows上通过FTP上传带有中文名称的文件后,这些文件在Linux中显示为乱码。这主要是由于编码不兼容导致的。Windows系统默认使用GBK编码来存储文件名,而...

    jsp中页面间传汉字参数转码的方法.docx

    在JSP中,当需要将含有汉字的参数通过URL传递时,必须先进行转码,以防止URL中特殊字符或非ASCII字符引起的问题。通常,我们可以使用`java.net.URLEncoder.encode()`方法来对字符串进行编码。这个方法会将字符串中的...

Global site tag (gtag.js) - Google Analytics