Ajax中文乱码问题

JS代码:

    var userName=$("#userName").val();  
    var url = "user/login.action?userName=" + encodeURI(encodeURI(userName));  
    //或者  
    var url =encodeURI(encodeURI( "user/login.action?userName=" + userName));  

Java代码:

    String userNameStr=URLDecoder.decode(request.getParameter("userName"), "UTF-8");  
      
    这样就可以了,也可以遍历所有的值:  
    for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {  
            String name = (String) e.nextElement();  
            String str = request.getParameter(name);  
            String value = java.net.URLDecoder.decode(str, "UTF-8");  
        System.out.println(value);  
    }  

  注意事项:

 

 

1.连续两次调用ecodeURI的原因:是因 Java 中的 request.getParameter(String) 方法会行一次 URI 的解码过程,内置的解码过程会致乱

而 URI编码两次后, request.getParameter(String) 函数得到的是原信息 URI 编码一次的内容。接着用 java.net.URLDecoder.decode(String str,String codename) 方法,将已经编码的 URI 转换成原文。

 

 

2.在js里面可以alert(url),发现编码之后的格式我们已经“不认识”了(如果参数值是中文的);在java里面可以先获取,发现我们不认识,但是应该含有“%”这样的字样,这是unicode编码格式的;java.net.URLDecoder.decode是解码方法,和编码相对。就如同加密解密一样。

 

 

3..并不是所有的请求都要转码,如果是非ajax的请求,可以在web.xml里面添加如下代码使用spring的过滤器进行编码


XML代码:

    <!-- 字符编码 filter 统一使用 "UTF-8"(文件/请求) -->  
    <filter>  
        <filter-name>encodingFilter</filter-name>  
        <filter-class>  
            org.springframework.web.filter.CharacterEncodingFilter  
        </filter-class>  
        <init-param>  
            <param-name>encoding</param-name>  
            <param-value>UTF-8</param-value>  
        </init-param>  
        <init-param>  
            <param-name>forceEncoding</param-name>  
            <param-value>true</param-value>  
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>encodingFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  


原文 地址: Ajax中文乱码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值