`
c840898727
  • 浏览: 3255 次
社区版块
存档分类
最新评论

为什么java.net.URLEncoder.encode方法要调用两次而不是一次呢?

阅读更多
因为在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就回将它转会汉字;
分享到:
评论

相关推荐

    urlencoder:java.net.URLEncoder

    urlencoder 在Node.js中实现Java Land URLEncoder安装$ npm install urlencoder 例子超级简单: var encoder = require ( 'urlencoder' ) ;encoder . encode ( '哈哈' ) ;执照麻省理工学院

    JavaCrawler

    java.net.URLEncoder.encode(parameters.get(name), "UTF-8")); } params=sb.toString(); }else{ for (String name : parameters.keySet()) { sb.append(name).append("=").append( java.net.URLEncoder....

    Java调用百度图像识别接口

    前三步和人脸检测几乎一样 人脸检测地址 https://blog.csdn.net/weixin_45736927/article/details/104696428 唯一不同的,就是我们需要...import java.net.URLEncoder; /** * 通用物体和场景识别 */ public class Pictu

    智能识别收货地址Java.pdf

    } sb.append(String.format("%s=%s", URLEncoder.encode(entry.getKey().toString(), "UTF-8"), URLEncoder.encode(entry.getValue().toString(), "UTF-8") )); } return sb.toString(); } public static void main...

    rsyntaxtextarea-2.0.7.jar

    org.fife.io.unicodereader java.net.URLEncoder.encode()

    java中URLEncoder.encode与URLDecoder.decode处理url特殊参数的方法

    主要给大家介绍了关于java中URLEncoder.encode与URLDecoder.decode处理url特殊参数的方法,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。

    url传递的参数值中包含&时,url自动截断问题的解决方法

    String charEncode = java.net.URLEncoder.encode(“&”); System.out.println(“字符& 转译后的值为:” + charEncode ); //输出:& 所以,解决方法出现了—在传送参数前, 将&全部替换为& eg: var url = ”page...

    html 中文乱码 HTML超链接中文乱码问题分析及解决方法

    在这里碰到的问题是:调用java.net.URLEncoder的encode()方法时,如果没有显示指定字符集参数,那么URLEncoder会使用默认字符集。这个默认字符集在Eclipse里跑main()方法和在Tomcat里跑Web应用,得到的结果不一样,...

    javascript中encodeURI和decodeURI方法使用介绍

    一、基本概念 encodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为... encodeURI()方法相当于java.net.URLEncoder.encode(URIStri

    java中的URLEncoder和URLDecoder类.docx

    java中的URLEncoder和URLDecoder类.docx

    ContractController.java

    String fileName=java.net.URLEncoder.encode("劳动合同.pdf", "UTF-8"); res.setHeader("Content-Disposition","attachment;filename="+fileName); templatePdf.setOutputEncoding("UTF-8"); ...

    Java get 提交乱码处理方法

    解决办法  1、在后台获取时采用  String b = new String(request.getParameter("name").getBytes("iso-8859...  在前台处理汉字 java.net.URLEncoder.ecode("中文","GBK");//前面是要处理的中文字符  eg: win

    Android编程实现获取新浪天气预报数据的方法

    其中,city后的城市可用java.net.URLEncoder.encode(“武汉”,” gb2312”);也可以直接写”武汉”,但不能用”wuhan”。Password固定 Day为0表示当天天气,1表示第二天的天气,2表示第三天的天气,以此类推,最大为4...

    URLEncoder

    支持UTF8、16、32编解码。

    Springboot2.1.4+redis+mysql

    @RequestMapping("/testjson") @ResponseBody ... argsStr = URLEncoder.encode(base,"utf8"); HttpClientUtil.httpRequest(requestUrl + "?data=" + argsStr, ""); System.out.println("10000000000"); } }

    GET 方式提交的含有特殊字符的参数

    在jsp里面怎么处理呢? 如我在连接<a>A&T Plastic,在接受参数的时候就没办法读取name参数的正确值,怎么样才能正确读取,还有其他的特殊字符 字符 特殊字符的含义 URL编码 #...=java.net.URLEncoder.encode(sUDRName6)%

    Ajax请求session超时处理流程

    response.sendRedirect(response.encodeRedirectURL(this.loginUrl + java.net.URLEncoder.encode(backToUrl, "UTF-8"))); } ajaxDone.jsp页面 ;charset=UTF-8" pageEncoding="UTF-8"%> { statusCode:${status...

    java 易懂易用的MD5加密(可直接运行)(2)

    import java.io.IOException; import java.io.... import java.net.URLEncoder; import java.security.MessageDigest; import java.text.SimpleDateFormat; import java.util.Calendar; import javax.crypto.Ci

    url中文字符解码

    通过URLEncoder.encode加密地址栏url上得中文字符, 并可通过java.net.URLDecoder.decode(str, charset)解密中文

    cookie和表单实现基本登录并保存信息

    否则跟第一次访问输入框为空一样 doLogin.jsp 执行login.jsp页面的请求,判断是否勾选保存登录状态 勾选了登录状态执行如下 获取用户名和密码(方法有2,方法2基于对方法1数据的优化) way1:请求获取参数 way2:对...

Global site tag (gtag.js) - Google Analytics