`

(转)为什么要两次调用encodeURI来解决乱码问题

    博客分类:
  • java
 
阅读更多

地址:http://blog.csdn.net/howlaa/article/details/12834595

 

.encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码.
. UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号.

假设页面端输入的中文是一个“中”,按照下面步骤进行解码

1.第一次encodeURI,按照utf-8方式获取字节数组变成[-28,-72-83],对字节码数组进行遍历,把每个字节转化成对应的16进制数,这样就变成了[E4,B8,AD],最后变成[%E4,%B8,%AD]  此时已经没有了多字节字符,全部是单字节字符。

2、第二次encodeURI,进行编码,会把%看成一个转义字符,并不编码%以后字符,会把%编码成%25.把数组最后变成[%25E4,%25B8,%25AD]然后就把处理后的数据[%25E4,%25B8,%25AD]发往服务器端,
当应用服务器调用getParameter方法,getParameter方法会去向应用服务器请求参数
应用服务器最初获得的就是发送来的
[%25E4,%25B8,%25AD],应用服务器会对这个数据进行URLdecode操作,应用服务器进行解码的这一次,不管是按照UTF-8,还是GBK,还是ISO-8859,,都能得到[%E4,%B8,%AD],因为都会把%25解析成%.并把这个值返回给getParameter方法

3\、再用UTF-8解码一次,就得到"中"了。

想想看,如果不编码两次,当服务器自动解码的时候,假如是按照ISO-8859去解码UTF-8编码的东西,就是会出现乱码。

JS:

  1. document.authorityForm.action = basePath3+"User_viewUser.do?id="+id+"&roleName="+encodeURI(encodeURI(roleName))+"&roleType="+roleType;  


JAVA后台:
   

  1. roleName = java.net.URLDecoder.decode(getRequest().getParameter("roleName"),"UTF-8"); 

 

分享到:
评论

相关推荐

    Java Http请求传json数据乱码问题的解决

    在实际解决乱码问题的过程中,如果发现使用Base64加密传输中文数据还会出现问题,可以改用URL编码的方式来传输数据,即使用JavaScript的`encodeURI`函数对数据进行两次URL编码,后端接收到后进行一次URL解码即可。...

    Jquery serialize() 中文乱码及解决方法

    Jquery serialize() 方法的中文乱码问题可以通过 decodeURIComponent 方法和两次 encodeURI 方法来解决。同时,在服务器端,我们需要使用 java.net.URLDecoder.decode 方法来将数据还原成原始的中文数据。

    get请求乱码问题 java

    ` 这样的操作会导致URL被编码两次,进一步增加了乱码的风险。虽然`encodeURI()`函数可以避免大部分特殊字符被编码成百分号加十六进制的形式,但如果连续调用,可能会导致不必要的二次编码,破坏原始数据结构。 ### ...

    Ajax乱码小结

    根据题目中的描述,“Ajax乱码:当调用`request.getParameter()`函数时,会自动进行一次URI的解码过程,调用时内置的解码过程会导致乱码出现。而URI 编码两次后,`request.getParameter()`函数得到的是原信息URI编码...

    jsp传值本地无乱码测试机出现乱码问题解决

    在上述代码中,`encodeURI`被错误地调用了两次。 ```javascript function wdQuery(){ var keywords = document.getElementById("i-0-keywords").value; var loginName = document.getElementById("i-0-loginName...

    JS的encodeURI和java的URLDecoder.decode使用介绍.docx

    - `encodeURI`通常需要调用两次,这是因为第一次编码后的字符串可能包含非ASCII字符,第二次编码可以确保所有字符都被正确编码。 - 编码后的字符串可以直接拼接到URL中。 #### 三、Java中的`URLDecoder.decode`方法...

    JS URL传中文参数引发的乱码问题

    1. 使用`encodeURIComponent()` 或两次调用`encodeURI()` 对中文参数进行编码。 2. 服务器端使用相应的解码函数,如Java的`URLDecoder.decode()`,并指定与原始编码相符的字符集(如UTF-8)。 注意,确保客户端和...

    java开发中文问题综合解决方法

    两次调用`encodeURI`函数是为了确保URL中的所有特殊字符,包括中文字符,都被正确编码。 #### 后端Servlet解码 在后端处理前端传来的参数时,应使用正确的解码方式: ```java String key = request.getParameter(...

    超链接传值不显示中文

    此段代码中,`encodeURI`被调用了两次,实际上这是不必要的。`encodeURI`函数可以将URL中的特殊字符转换为百分号编码的形式,使得这些特殊字符能够安全地在网络中传输。但需要注意的是,对于URL参数中的中文字符,仅...

    Java Web实现文件下载和乱码处理方法

    本文将详细介绍如何在Java Web环境下处理这两个问题。文件下载通常涉及从服务器检索文件并将其传输到客户端,而乱码问题则涉及到字符编码的正确处理,以确保文件名或内容在传输过程中保持原样。 **一、文件下载处理...

    前后台字符集转码.txt

    这里进行了两次`encodeURI()`操作,主要是为了避免某些特殊字符未被完全编码。这种做法虽然有些冗余,但在某些情况下可以提高兼容性。最终,通过`window.location`属性将构造好的URL重定向到服务器端。 ### 后端...

    JS的encodeURI和java的URLDecoder.decode使用介绍

    // 调用两次encodeURI方法以确保所有字符都被编码 var href = "<%=basePath%>recordManager/test_js_decodeURI.action?params=" + encodedData; ``` 在上述代码中,变量data被双重编码,然后拼接到URL中。这样做...

    jquery中ajax学习笔记4

    而对于中文乱码问题,则可以根据实际需求选择使用`encodeURI`结合`getBytes/decode`或者使用两次`encodeURI`配合`URLDecoder.decode`来解决。这些技巧可以帮助开发者更高效地完成Ajax应用的开发工作。

    jquery访问servlet并返回数据到页面的方法

    第一种方法是通过客户端对数据进行两次encodeURI编码,服务端则通过new String(old.getBytes("iso8859-1"), "UTF-8")进行解码。第二种方法则是客户端进行两次encodeURI编码,服务端使用URLDecoder.decode(old, "UTF-...

    jsp中URL传递中文参数的处理方法

    第一次调用encodeURI()会将中文字符转换为UTF-8编码的十六进制序列,而第二次调用则确保这些序列符合URL的标准格式,避免出现如“%”后跟非两位十六进制数等非法字符。 在JSP页面中,你可能会看到类似以下的...

    JQuery学习笔记

    - 在发送给服务器的数据中使用`encodeURI()`编码两次,服务器端使用UTF-8解码一次,可以解决中文乱码的问题。 **16. 获取元素的值** - `val()`方法可以获取表单元素的值,如`<input>`或`<textarea>`。 #### 二、...

    保证JavaScript和Asp、Php等后端程序间传值编码统一

    明确在何时、何地以及使用什么方式对数据进行编码和解码,能够避免编码错误导致的乱码问题。 6. 实际应用中,如果遇到无法通过一次函数调用完全解码的情况,可以尝试组合使用不同的解码函数,甚至可能需要反复尝试...

    JQuery用户名校验的具体实现

    对于中文乱码问题,常见的解决方案是在客户端使用encodeURI()函数对用户名进行两次编码,并在服务器端以UTF-8编码解析这些数据。这是因为网络传输中可能存在编码不一致导致乱码的问题。 在服务器端,通常会有一个...

Global site tag (gtag.js) - Google Analytics