通过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. 1622: [Usaco2008 Open]Word Power 名字的能量

    1622: [Usaco2008 Open]Word Power 名字的能量 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 370  Solved: 18 ...

  2. Spring IOC容器中Bean的生命周期

    1.IOC容器中Bean的生命周期 构造器函数 设置属性 初始化函数(在Bean配置中 init-method) 使用Bean 结束时关闭容器(在Bean中配置destroy-method) 2.Be ...

  3. SEO-友情链接注意事项

    为什么要专门给友链一个区域呢?由此就可以想象到友情链接对一个网站有多重要前期,网站没有权重的时候,跟别人换友链,人家基本是不会换的因为你网站没权重,加了友链他也获取不到权重,对网站没有多少好处一般我们 ...

  4. 【转载】扩展Robot Framework,实现失败用例自动再执行(失败重跑)

    使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法: 通过改写RobotFramework源代码增加--retry选项,实现test级别的失败 ...

  5. HDFS Namenode启动过程

    文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/6564032.html  转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...

  6. 腾讯QQ会员技术团队:人人都可以做深度学习应用:入门篇(下)

    四.经典入门demo:识别手写数字(MNIST) 常规的编程入门有"Hello world"程序,而深度学习的入门程序则是MNIST,一个识别28*28像素的图片中的手写数字的程序 ...

  7. “Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误 (转别人)

    eclipse maven 在项目的pom.xml的<build></build>标签中加入: <plugins> <plugin> <group ...

  8. 对VC++6.0爱得深沉(三)静态库的制作与使用

    [创建] 1)建立新工程(win32静态库) (2)加入.h文件于.cpp文件如图. 3)编译-构建,生成.lib文件 [使用] 1)新建普通控制台程序 2)打开项目文件夹与刚才生成的库文件夹 3)方 ...

  9. C#实现无边框窗体点击任务栏图标正常最小化和还原

    protected override CreateParams CreateParams{ get { const int WS_MINIMIZEBOX = 0x00020000; // Winuse ...

  10. lucene原理及源码解析--核心类

    马云说:大家还没搞清PC时代的时候,移动互联网来了,还没搞清移动互联网的时候,大数据时代来了. 然而,我看到的是:在PC时代搞PC的,移动互联网时代搞移动互联网的,大数据时代搞大数据的,都是同一伙儿人 ...