通过URL传中文参数时,在服务端后台获取到的值往往会出现乱码问题,解决方案有很多种,本文主要介绍如何通过encodeURI来解决中文乱码问题:

first:前端传递参数的时候需要对中文参数进行两次encodeURI处理:

​var requestUrl = 'url?roleName='+encodeURI(encodeURI("rowObj.appName"));

注:rowObj.appName​表示即将传到后台的带中文的字符串

​second:在服务器端后台程序代码中要用java.net.Decode进行解码,得到中文:

String appName= java.net.URLDecoder.decode(request.getParameter("roleName"),"UTF-8");

两步搞定!

然而,为什么前端要进行两次encodeURI???原因如下:

1、encodeURI函数主要是来对URI来做转码,它默认采用的是utf-8的编码;​

2、常规来看,中文汉字在utf-8中一般是3个字节构成,每一个字节会转换成16进制的编码,同时加上%号;

假设页面中需要传到后台的中文是一个“中”字,按照下面的过程走一遍:

1)第一次encodeURI,按照utf-8的方式获取字节数变成[-28,-72,-83],对字节码数组进行遍历,把每个字节转化成对应的16进制数,于是就变成了[E4,B8,AD],最终变成[%  E4,%  B8,%  AD]   (注意:请去掉%和编码中间的空格,我这边写出来你们看到就是乱码了,下面的这种也是一样),此时已经没有了多字节字符,全部都是单字节字符。

2)第二次encodeURI进行编码,会把%看做转义字符,并且不编码%后面的字符,会把%变为%​25,于是刚刚的数组就变成了[%  E4,%  B8,%  AD],然后就把处理好的[%  E4,%  B8,%  AD]发往服务器,当应用服务器调用getparameter方法时,getparameter方法会去向应用服务器请求参数,然而应用服务器最初收到的就是从前端发来的[%  E4,%  B8,%  AD],应用服务器容器会默认解一次码,而容器默认解码时采用的编码是容器的默认编码,可能是utf-8,GBK,或者ISO-8859,都能得到[%  E4,%  B8,%  AD],因为会把%解析成%,并且把这个值返回给getparameter方法;

3)最终用​java.net.Decode 采用utf-8编码进行解码,就能得到“中”字了;

所以,如果当时只是单单编码一次,当​容易自动解码(默认解一次码)的时候,如果是按照 ISO-8859 去解码 UTF-8 编码的东西然后返回给getparameter方法就是乱码了。

核心代码:

js :​   encodeURI(encodeURI("rowObj.appName"))

java :java.net.URLDecoder.decode(request.getParameter("roleName"),"UTF-8");  ​

个人小结,仅做参考,如有问题,欢迎各位大神指教,另外,感谢两篇参考文献,地址:

​http://blog.csdn.net/howlaa/article/details/12834595

http://www.tuicool.com/articles/fuqIBju

URL传中文参数导致乱码的解决方案之encodeURI的更多相关文章

  1. [转]URL传中文参数导致乱码的解决方案之encodeURI

    通过URL传中文参数时,在服务端后台获取到的值往往会出现乱码.解决方案有很多种.本文介绍如何通过encodeURI来解决中文乱码问题. 首先,在前端页面准备参数的时候,需要对中文参数进行encode处 ...

  2. (转) jsp页面 URL传中文参数到Action里面出现乱码

    jsp页面 URL传中文参数到Action里面出现乱码,方法如下: 第一种:在Action中用 new String(str.getBytes("ISO8859_1"), &quo ...

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

    今天的项目中碰到了一个乱码问题,从JS里传URL到服务器,URL中有中文参数,服务器里读出的中文参数来的全是“?”,查了网上JS编码相关资料得以解决. 解决方法一: 1.在JS里对中文参数进行两次转码 ...

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

    Action获取jsp表单中的中文参数,只要整个项目都采用UTF-8编码格式都不会出现乱码问题:但JSP中用到JS,并从JS向Action传中文参数,就会出现中文乱的现象     做项目的时候,发现A ...

  5. 通过URL传递中文参数的乱码处理

    环境:web.xml中配置了 <filter> <filter-name>encodingFilter</filter-name> <filter-class ...

  6. 解决url传中文参数问题

    项目中要做一个表格导出功能,用的是location.url传值给后台导出表格数据.由于传中文会出现乱码现象.故需要给参数转码,具体如下: 对于url要传的中文参数进行两次编码(注意是两次),即enco ...

  7. spring mvc 框架URL接收中文参数的乱码解决方案

    后台可能就会出现乱码,具体解决方案如下: 一. 配置tomcat目录下的service.xml文件 tomcat7/conf/server.xml 给该行代码加上 URIEncoding=" ...

  8. jsp页面之间传中文参数显示乱码问题的解决

    最近在项目中遇到jsp页面通过url传递参数,出现乱码,但是在本地是正常显示,在服务器上却是乱码,找了好久都没找到解决方法,最终在大神的帮助下解决了这个问题 比如从a.jsp像b.jsp页面传递参数 ...

  9. Mysql向存储过程中传递中文参数变成乱码的解决方案

    今天做程序需要用到一个存储过程,然后用php程序调用.  存储过程如下: delimiter $$ CREATE PROCEDURE disagree_upgrade_detail(a int,b t ...

随机推荐

  1. 【RecyclerView与Glide】实现一个Android电子书阅读APP

    http://www.cnblogs.com/xfangs/ 欢迎在本文下方评论,小方很需要鼓励支持!!! 本系列教程仅供学习交流 小说阅读器最终实现效果见 第一篇博文 前言 在上一篇文章中,我们实现 ...

  2. WeMall的Android app商城中的wemall doraemon代码

    WeMall-Android 包含SMSSDK/WeMall-Client/social_sdk_library_project三个项目以及Api目录下的client.php/update.xml接口 ...

  3. server error in '/' applecation----Compiler Error Message: CS0016: Could not write to output file 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\xx' -- 'Access is denied

    今天在阿里云虚拟机上部署新站点后出现下面的错误:server error in '/' applecation Compiler Error Message: CS0016: Could not wr ...

  4. 2929: [Poi1999]洞穴攀行

    2929: [Poi1999]洞穴攀行 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 80  Solved: 41[Submit][Status][Di ...

  5. Fibonacci数列前n项值的输出(运用递归算法)

    1.斐波那契数列: 又称黄金分割数列,指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 在数学上,斐波纳契数列以如下被以递归的方法 ...

  6. RAC OCR盘故障导致的集群重启恢复

    一.事故说明 最近出现了一次OCR盘的故障导致Oracle集群件宕机的事故,后以独占模式启动集群,并使用ocr备份恢复了OCR文件以及重新设置了vote disk,然后关闭集群,重启成功. 因此在此处 ...

  7. Android开发之自定义视图

    继承View 1.重写onMeasure(int wMeasureSpec,int hMeasureSpec)处理程序,这样可以标明视图尺寸 2.重写onDraw,以便绘制我们自己的自定义视图内 3. ...

  8. 说说JAVA之网络编程 - 爬虫

    首先总结一下学习过程中所需要的类: URL类 - openConnection() URLConnection类 - connection() getInputStream() BufferedRea ...

  9. Shell中一键添加作者,版权信息

    第一步:编辑/etc/vimrc文件 [root@proxy ~]# cp /etc/vimrc /etc/vimrc.ori [root@proxy ~]# vim /etc/vimrc 第二步:直 ...

  10. require include php5中最新区别,百度上好多错的。

    二者报错机制不同,include是warning 继续执行程序,require会报致命错误,中断程序运行. 前者有返回值,后者则没有. 注意了,php5里有一个区别没了,之前说的是require是无条 ...