`

(转)为什么要两次调用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"); 

 

分享到:
评论

相关推荐

    javaScript encodeURI中文乱码

    javaScript encodeURI中文乱码

    URL传中文参数导致乱码的解决方案之encodeURI

    URL传中文参数导致乱码的解决方案之encodeURI

    ajax中文乱码如何解决

    今天终于解决了AJAX的中文乱码问题,写篇文章来帮助一下...今天把问题解决了,很简单,是使用escape(或encodeURI,两个函数javascript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这是解决问题的关键

    多文件上传例子(解决中文乱码)

    多文件上传例子,彻底解决中文乱码问题了。总结中文乱码问题如下: 1、所有页面都用UTF-8。 2、写过滤器,设置request.setCharacterEncoding("UTF-8")。 3、javascript脚本里用encodeURI(str)。 4、适当的时候,在...

    Request.QueryString 乱码问题

    Request.QueryString 获取的中文变乱码了,解决方法如下 1、html中,可以用js的 encodeURI() 方法将要传的中文处理,例如 encodeURI("I am 乱码") ,处理之后,字符串中的中文 “乱码” 两字将会被被十六进制的转义...

    js的encodeUri编码转换为GBK问题

    NULL 博文链接:https://forhope.iteye.com/blog/1771461

    encodeURIComponent encodeURI 中文转GBK编码

    serialize , encodeURIComponent encodeURI 中文转成GBK编码 encodeURIComponent encodeURI 默认转 utf-8 ;重写方法 转成GBK

    AJAX中文乱码问题探讨及解决

    AJAX中文问题分为两大类: 1)发送路径中的参数有中文,在服务器段接收参数值是乱码 例如: var url=”a.... //两次,很关键[具体为什么,我也不清楚] /********************************************/ 也有人写成var

    web程序开发中的URL乱码解决方案

    如果是在js中使用的超级连接,则要先把该超连接经过两次转换为十六进制的编码后再保存在一个变量中,即:var url=encodeURI("...");url=encodeURI(url);window.lo cation.href=url; (2).如果该超连接在页面中,可通过...

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

    如果不想在url中看到有明文,比如... //调用2次encodeURI href=”<%=basePath%>recordManager/test_js_decodeURI.action?params=”+val (2)服务器端这样 代码如下: HttpServletRequest

    页面get请求 中文参数方法乱码问题的快速解决方法

    两次使用encodeURI()方法:例如:encodeURI(encodeURI(“中文”)),然后再服务器中使用URLDecoder.decode(“中文”, “UTF-8”); 以上这篇页面get请求 中文参数方法乱码问题的快速解决方法就是小编分享给大家的全部...

    SmartUpload中文乱码解决

    SmartUpload中文乱码解决版本 亲自改写源码 jar包含源码 亲测可用 CSDN另一人上传的 不包含SmartUpload的Request类 不完善 201 511行进行修改 String s11 = new String(m_binArray, m_startData, (m_endData - m_...

    JavaScript中的常见问题解决方法(乱码,IE缓存,代理)

    解决AJAX中文乱码常用的两种方法 1. 在客户端进行encodeURI(utf-8也可以不做,默认),在服务器端将iso-8859-1编码转为utf-8编码 2.在客户端进行两次encodeURI,在服务器端进行一次转换。 第2种方法能解决问题的...

    js传参乱码解决(亲测可行)

    js传参乱码解决(亲测可行) 我们只需在我们的页面作如下处理: 1、js中在参数中:encodeURI(encodeURI(paramName))……

    Ajax传递中文参数到后台乱码的有效解决方法

    使用Ajax传递中文参数,如果不对参数进行处理的话,传到后台会变成乱码,经测试可以使用如下方法 这里是以jquery.autocomplete插件中获取输入框中的数据传到后台为例: 注意要对中文使用encodeURI编码两次 代码如下:...

    从js向Action传中文参数出现乱码问题的解决方法

    经过实践发现下面的方法可以解决中文乱码问题: JSP的JS中:中文参数用encodeURI(encodeURI(中文参数)),经过两次转码。例如: 代码如下: function show(next,id,realName){ document.forms[‘f2’].action=”...

    java URL中文参数乱码处理

    js 中乱码处理法方式 encodeURIComponent(encodeURIComponent(customerAddress)) decodeURIComponent(customerName) js到java encodeURI(url) String qijuType= new String(request.getParameter( (...

    解决URL地址中的中文乱码问题的办法

    解决URL地址中的中文乱码问题的办法 ... 但是,在实际的开发和使用中,确是有乱码情况的发生,在后台的读取keyword信息为乱码,无法正确读取。 2. 乱码是如何产生的?  由于我们利用URL传递参数这种方式是依

    易语言JS实现编码转换

    易语言JS实现编码转换源码,JS实现编码转换,decodeURI,encodeURI

    Get中文乱码IE浏览器Get中文乱码解决方案

    Get中文乱码问题解决方案: 修改Tomcat根目录下conf / server.xml文件,代码如下: 代码如下: ”8080″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443″ URIEncoding=”UTF-8″> 但是,...

Global site tag (gtag.js) - Google Analytics