javaWeb中URLEncoder.encode编码需要调用两次
今天碰到一个问题,在Controller类中一个方法跳转到该类中的另一个方法,带着中文参数,在跳转之前对该参数进行编码:
msg = java.net.URLEncoder.encode(msg,"UTF-8");
ResponseData response = new ResponseData("redirect:/service/mxgl/"+typeid+"/"+cube.getDstype()+"/mxs?msg="+msg);
在另一个方法里接收该参数:
String msg = request.getParameter("msg");
if( msg != null){
msg = java.net.URLDecoder.decode(msg,"UTF-8");
view.addObject("msg",msg);
}
结果在前台显示乱码,百思不得其解,遂百度,终于知道原因:原来在服务器端用request.getParameter("msg")获取参数之前会自动做一次解码的工作,而且是默认的ISO-8859-1,相当于调用了一次java.net.URLDecoder.decode(msg, "ISO-8859-1"),难怪有乱码,这就相当于:
public static void main(String[] args) throws UnsupportedEncodingException {
String name="测试";
//UTF-8编码
name=java.net.URLEncoder.encode(name,"UTF-8");
System.out.println(name);
//ISO-8859-1解码
name=java.net.URLDecoder.decode(name, "ISO-8859-1");
System.out.println(name);
//UTF-8解码
System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));
}
结果:

解决方案是对要传的中文参数进行两次编码,这就相当于:
public static void main(String[] args) throws UnsupportedEncodingException {
String name="测试";
//UTF-8编码
name=java.net.URLEncoder.encode(name,"UTF-8");
System.out.println(name);
//UTF-8编码
name=java.net.URLEncoder.encode(name,"UTF-8");
System.out.println(name);
//ISO-8859-1解码
name=java.net.URLDecoder.decode(name, "ISO-8859-1");
System.out.println(name);
//UTF-8解码
System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));
}
结果:

这样就解决了乱码问题。另外你可能有个疑问,为什么用UTF-8编码两次,然后分别用ISO-8859-1和UTF-8解码没问题呢?不应该是UTF-8解码两次无乱码问题吗?那是因为第一次编码后将汉字编码为%和字母数字的格式,而第二次编码的时候是对%和字母数字进行编码,虽然解码的时候使用的是ISO-8859-1,但是对于%和字母数字而言用ISO-8859-1和UTF-8解码出来的是一样的,此时就回到了汉字被编码过一次的字符串了,当再次进行解码的时候使用UTF-8就回将它转会汉字。
javaWeb中URLEncoder.encode编码需要调用两次的更多相关文章
- 中文乱码在java中URLEncoder.encode方法要调用两次解决
中文乱码在java中URLEncoder.encode方法要调用两次解决 一.场景: 1.我在客户端要通过get方式调用服务器端的url,将中文参数做utf-8编码,需要在js中两次的进行编码,服务器 ...
- javaWeb中URLEncoder.encode空格问题
近期开发一个在线坐席的功能.发现推送的消息中空格变成了+ .查询发现URLEncoder.encode的问题.曾经用的时候也没注意过,解决的方法网上是对URLEncoder.encode的之后的字符串 ...
- 为什么java的web开发中URLEncoder.encode方法要为什么要调用两次
一: 我们先看2个编码的情况 String name=java.net.URLEncoder.encode("测试", "UTF-8"); System.out ...
- 我对JavaWeb中中文URL编码的简单总结
1.application/x-www-form-urlencoded 它是一种编码类型.当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成application/x-www-form-u ...
- URLEncoder.encode编码空格变+号
今天调用rest接口的时候,使用URLEncoder编码将空格转为了+号,而rest接口方需要将空格转为%20,参照标准 之后用了不少在线的工具测试,有的将空格转为了+号,有的则是转为了%20.看了一 ...
- javaweb中的关于编码问题总结
1.pageEncoding="utf-8" 设置JSP编译成Servlet时使用的编码 2.Contenttype="text/html;charset=utf-8&q ...
- java中的URLEncoder.encode对应JS中用decodeURIComponent,js和java编码,解码
用get请求传中文,经常搞到乱码,这几天搞搞这个东西,总结一下,以方便以后处理这类的问题. Java代码中的URLEncoder.encode方法和JS的encodeURIComponent功能差不多 ...
- 解决java中对URL编码的问题
首先查看javascript中的encodeURI和encodeURLComponent方法的区别. encodeURI:不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行 ...
- SpringBoot(八):SpringBoot中配置字符编码 Springboot中文乱码处理
SpringBoot中配置字符编码一共有两种方式 方式一: 使用传统的Spring提供的字符编码过滤器(和第二种比较,此方式复杂,由于时间原因这里先不介绍了,后续补上) 方式二(推荐使用) 在appl ...
随机推荐
- Android常见错误整理
1.当我new class的时候,提示以下错误: Unable to parse template "Class" Error message: This template did ...
- Unity引擎的Player Settings介绍
我用的是unity5.4.3版本的 一.窗口打开: 从菜单栏查看播放器设置,选择 Edit->Project Settings->Player 二.全局设置 第一部分: Company N ...
- C#屏蔽Alt+F4,解决Alt+F4关闭窗体时对话框NO后,线程不退出问题
//1.将窗体的属性KeyPrieview设置为true //keypreview属性为true的时候,就可以响应键盘事件v //2.在窗体KeyDown事件中加如下代码 private void F ...
- 《计算机图形学基础(OpenGL版)》勘误表
第1版第1次印刷: 所在页码 所在行 原内容 更正为 41 16 k=Δx/Δy k=Δy/Δx 46 6 s-t=2Δy/Δx(xi+1)+2b+2yi-1 s-t=2Δy/Δx(xi+1)+2b- ...
- linux 下取进程占用 cpu/内存 最高的前10个进程
linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ;|head linux下获取占用内存资源最多的10个进程,可以使用如下命令组合: ;|head 命令组合解析(针对CPU的,M ...
- BZOJ 1426: 收集邮票 数学期望 + DP
Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且 买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡 ...
- (34)Spring Boot的启动器Starter详解【从零开始学Spring Boot】
Spring Boot应用启动器基本的一共有N(现知道的是44)种:具体如下: 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2 ...
- Spring Cloud-个人理解的微服务演变过程(一)
最初架构 说明:最初我们架构是垂直的 所有功能都在一个项目里面 随着业务和用户的增长 原来一台服务器已经不能支撑现有的请求数 这个时候我们就需要部署多台服务器 集群模式 说明:我们使用nginx做代理 ...
- ExtJs之Ext.ElementLoader.load
稍微书上代码不适合. var btns = Ext.select('input'); 需要更改为: var btns = Ext.select('input', true); 不然报错: [E] Ex ...
- 浅析IT系统监控方法和应用
浅析IT系统监控方法和应用 http://blog.csdn.net/zhangman117/article/details/35549363