2019独角兽企业重金招聘Python工程师标准>>>

因为在jsp中对中文进行了编码的时候用的是UTF-8的编码方式,而在servlet中调用request.getParameter();方法的时候使用服务器指定的编码格式自动解码一次,所以前台编码一次后台解码一次而解码和编码的方式不用所以造成了乱码的出现,

这就类似于以下代码:

String name = java.net.URLEncoder.encode( " 测试 " , " UTF-8 " ); System.out.println(name); System.out.println(java.net.URLDecoder.decode(name, " ISO-8859-1 " ));

编码后的是%E6%B5%8B%E8%AF%95。。
而用ISO-8859-1解码后的是???è?。。

但是如果调用的是

System.out.println(java.net.URLDecoder.decode(name, " UTF-8 " ));

则结果是打印“测试”。

这就印证了 之前为什么我在servlet中调用java.net.URLDecoder.decode(request.getParameter("name"), "UTF-8")方法和调用java.net.URLDecoder.decode(request.getQueryString(), "UTF-8")所得到的结果是不一样的,就是由于在request.getParameter("name")之前会自动做一次解码的工作,而且是默认的ISO-8859-1。

所以,在使用java.net.URLEncoder.decode()和java.net.URLDecoder.decode(),的时候需要在前端页面中使用两次java.net.URLDecoder.decode()方法。

使用两次编码的过程相当于如下代码:

String name = java.net.URLEncoder.encode( " 测试 " , " UTF-8 " ); System.out.println(name); name = java.net.URLEncoder.encode(name, " UTF-8 " ); System.out.println(name); name = java.net.URLDecoder.decode(name, " UTF-8 " ); System.out.println(name); System.out.println(java.net.URLDecoder.decode(name, " UTF-8 " ));

输出为:

%E6%B5%8B%E8%AF%95
            %25E6%25B5%258B%25E8%25AF%2595
            %E6%B5%8B%E8%AF%95
            测试

第一次编码后将汉字编码为%和字母数字的格式,而第二次编码的时候是对%字母数字进行编码,虽然解码的时候使用的是ISO-8859-1,但是对于%和字母数字而言用ISO-8859-1和UTF-8解码出来的是一样的,此时就回到了汉字被编码过一次的字符串了,当再次进行解码的时候使用UTF-8就回将它转会汉字。

转载于:https://my.oschina.net/u/865921/blog/171878

中文乱码在java中URLEncoder.encode方法要调用两次解决相关推荐

  1. 为什么java的web开发中URLEncoder.encode方法要为什么要调用两次

    一: 我们先看2个编码的情况 String name=java.net.URLEncoder.encode("测试", "UTF-8");           ...

  2. java encode 空格_javaWeb中URLEncoder.encode空格问题

    近期开发一个在线坐席的功能.发现推送的消息中空格变成了+ .查询发现URLEncoder.encode的问题.曾经用的时候也没注意过,解决的方法网上是对URLEncoder.encode的之后的字符串 ...

  3. IDEA控制台中文乱码(JAVA

    IDEA控制台中文乱码(JAVA)且修改idea编码后仍未解决 乱码情况 如图红色圈内乱码但黄色字体并不乱码. 即经过了Java程序的中文会乱码,而IDEA自身的中文编码是正常的. 解决办法:使用jd ...

  4. java.net.urlencoder_使用java.net.URLEncoder.encode()可以对要传递的中文进行编码

    使用java.net.URLEncoder.encode()可以对要传递的中文进行编码 a.在传参数之前先把参数进行转码:java.net.URLEncoder.encode(param);取值时用语 ...

  5. 关于java.net.URLEncoder.encode编码问题

    Q:java.net.URLEncoder.encode里的编码和什么有关的? A:使用urlencoder编码会将中文变成你在浏览器地址栏看到的%XX形式,至于选择哪种enc编码跟你jvm的defa ...

  6. URLEncoder.encode方法解析

    jar包:rt.jar 解释: 当content-type=x-www-form-urlencoded,使用get发送请求参数中含中文时,使用该方法将中文转换: String keywords = U ...

  7. Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法

    public static void main(String[] args) {} 或者 public static void main(String args[]) {} main方法是我们学习Ja ...

  8. JAVA中复制数组的方法

     在JAVA里面,可以用复制语句"A=B"给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么 ...

  9. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

最新文章

  1. ios 如何对UITableView中的内容进行排序
  2. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第8章-有输入时滞的二阶多智能体系统的多一致
  3. 操作系统服务:logging日志记录模块
  4. 【PP MRP】MRP参数详解
  5. android9 关闭点击动画,在Android app中实现九(n)宫格图片连续滑动效果
  6. c++数据格式化输出/字符串复制/字符串比较
  7. 老司机多年BT下载软件-这些下载神器你都用过吗
  8. VAX 过期重新安装办法。
  9. socket写超时c语言,设置socket超时时间
  10. IOS个人开发者账号和wp公司开发者帐号申请注意点
  11. 吴恩达机器学习笔记-无监督学习
  12. pytorch深度学习_用于数据科学家的深度学习的最小pytorch子集
  13. 关于苏宁易购的好坏与网购的心酸苦逼史,有同感的请继续顶起
  14. SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛*(抽球游戏-fwt开立方)
  15. 使用Python绘制圣诞树教程(附源代码)
  16. pythonmatplot教程_matplotlib入门实战全教程
  17. Abandoned country
  18. 为了搞明白统计套利,从两组序列之间的关系说起
  19. 导航电子地图制作资质的办理指南
  20. window 卸载串口cp210x驱动并安装

热门文章

  1. Keil5 MDK版 下载与安装教程(STM32单片机编程软件)
  2. 【C++笔记】构造函数与析构函数相关知识
  3. 数据结构笔记(十四)-- 串的模式匹配算法
  4. nmap扫描ipv6端口_web渗透测试系列 之 扫描(3)
  5. extjs 方法执行顺序_(软件工程)非结构化程序变为结构化程序的三种方法
  6. 井通swtc能不能涨到2元_玉米收购价最高涨110元一吨,节后玉米能否破1.2?收购商说得有理...
  7. 如何在验证集加噪声_图像去噪:如何去其糟粕,取其精华?
  8. 查询接待收待飞地数量失败_中国有哪些飞地?
  9. apan在PHP什么意思,Apanteles是什么意思
  10. vim替换字符串带斜杠_Vim:正则表达式匹配一个字符串