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

首先,在前端页面准备参数的时候,需要对中文参数进行encode处理:

var url = 'HelloWorldServlet?star_name='+
encodeURI(encodeURI("刘德华"));
window.open(url);

 其次,在服务端后台程序代码中用java.net.Decoder进行解码,从而得到中文参数的真实值:

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

目的达到了。哈哈,很简单吧。不过此时你可能有个疑问,前端在进行encode编码是,为什么用了两次encodeURI,而服务器后端在解码时只解了一次?

原因是:容器会默认帮你解一次码。

此时,你可能又要问了,既然容器会默认解一次码,那么为什么不直接在前端只进行一次encode,服务端程序直接request.getParameter(“star_name”) ?画蛇添足了吧?

原因是:容器默认解码时采用的编码是容器的默认编码,可能是UTF-8,GBK,也可能是其他编码方式。这与你的应用的编码方式未必会一致。所以你直接获取的话可能会出现乱码。

当然也可以通过修改容器的默认编码,而实现“前端一次encode——后端直接获取”的途径获取中文参数。

例如:Tomcat的默认编码修改方式:

修改%TOMCAT_HOME%/conf/server.xml,找到这行代码:

<Connector port="8080" protocol="HTTP/1.1" redirectPort="8449" connectionTimeout="20000"/>

  

在后面可以追加URIEncoding属性,例如:

<Connector port="8080" protocol="HTTP/1.1" redirectPort="8449" connectionTimeout="20000" URIEncoding="UTF-8"/>

如果不方便改容器默认编码方式,或者应用程序本身就有多种编码方式的话,还是采取本文给出的解决方案,通过“前端两次encode——后端一次decode”的途径获取中文参数吧。

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

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

    通过URL传中文参数时,在服务端后台获取到的值往往会出现乱码问题,解决方案有很多种,本文主要介绍如何通过encodeURI来解决中文乱码问题: first:前端传递参数的时候需要对中文参数进行两次en ...

  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. python接口测试-项目实践(一) 测试需求与测试思路

    测试需求: 第三方系统提供了3个接口,需要测试前端显示的字符串里的对应数据与接口数据是否一致. 测试分层: 开发人员的设计:每周从接口取一次数据,拼接完成后保存到数据库.再从数据库取数提供接口给前端开 ...

  2. IOS CoreLocation框架的使用(用于地理定位)

    ●  在移动互联网时代,移动app能解决用户的很多生活琐事,比如 ●  导航:去任意陌生的地方 ●  周边:找餐馆.找酒店.找银行.找电影院 ●  在上述应用中,都用到了地图和定位功能,在iOS开发中 ...

  3. C++11之std::future和std::promise和std::std::packaged_task

    为什么C++11引入std::future和std::promise?C++11创建了线程以后,我们不能直接从thread.join()得到结果,必须定义一个变量,在线程执行时,对这个变量赋值,然后执 ...

  4. Android开发经验01:31个Android开发实战经验

    1. 在Android library中不能使用switch-case语句访问资源ID:在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案 2. 不能 ...

  5. 管道(Pipelines)模型

    Pipeline模型最早被使用在Unix操作系统中.据称,假设说Unix是计算机文明中最伟大的发明,那么,Unix下的Pipe管道就是尾随Unix所带来的还有一个伟大的发明[1].我觉得管道的出现,所 ...

  6. Codeforces 225E 梅森素数

    注:梅森素数,数组表示的是2^n-1的n,指数. #include <stdio.h> #include <math.h> ; ; typedef long long ll; ...

  7. Android学习笔记_39_tween动画的实现(Animation和Frame)

    一.Animation动画的实现及特点: 1.Tween动画,通过对 View 的内容进行一系列的图形变换 (包括平移.缩放.旋转.改变透明度)来实现动画效果.   动画效果的定义可以采用XML来做也 ...

  8. 2018年暑假ACM个人训练题9(动态规划)解题报告

    A:m段最大字段和问题 https://www.cnblogs.com/yinbiao/p/9314528.html B:map的使用(根本就不是dp!!!) https://www.cnblogs. ...

  9. Access用OleDbParameter更新/插入数据

    /// <summary> /// 更新一条数据 /// </summary> public void Update(ZPY.Model.News model) { Strin ...

  10. o'Reill的SVG精髓(第二版)学习笔记——第七章

    第七章:路径 所有描述轮廓的数据都放在<path>元素的d属性中(d是data的缩写).路径数据包括单个字符的命令,比如M表示moveto,L表示lineto.接着是该命令的坐标信息. 7 ...