zoukankan      html  css  js  c++  java
  • 为什么java的web开发中URLEncoder.encode方法要为什么要调用两次

    一: 我们先看2个编码的情况

    1. String name=java.net.URLEncoder.encode("测试", "UTF-8");
    2. System.out.println(name);
    3. name=java.net.URLEncoder.encode(name,"UTF-8");
    4. System.out.println(name);
    5. name=java.net.URLDecoder.decode(name, "UTF-8");
    6. System.out.println(name);
    7. 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
                测试

    二; 我们来看编码一次,提交给服务器的结果

    我们吧“测试”编码一次的字符串%E6%B5%8B%E8%AF%95  ,提交,服务器端用request.getParameter("name")的到参数,然后我们解码

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

    我们发现得到的结果 ???è?  显示乱码。

    因为在request.getParameter("name")之前会自动做一次解码的工作,而且是默认的ISO-8859-1,相当于调用了一次java.net.URLDecoder.decode(name, "ISO-8859-1")

    所以我们再用URLDecoder.decode(name, "UTF-8")就是乱码了。


    三: 我们在看编码2次,提交给服务器的结果

    编码2次的字符串是%25E6%25B5%258B%25E8%25AF%2595 ,服务器端用request.getParameter("name")的到参数,自动按ISO-8859-1解码得到的串是%E6%B5%8B%E8%AF%95  ,也就是编码一次得到的字符串。


    然后,我们在System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));解码输出,得到的结果就是 “测试” 2个汉字。




  • 相关阅读:
    JAVA中HashMap相关知识的总结(一)
    linux进阶之路(三):vi/vim编辑器
    linux进阶之路(二):linux文件目录
    linux进阶之路(一):linux入门
    linux:lrzsz安装
    一:阿里云服务器使用及后台环境搭建
    第二篇:线程七种状态
    Git log
    redis3.0 集群实战3
    详解Linux chgrp和chown命令的用法
  • 原文地址:https://www.cnblogs.com/jpfss/p/9894629.html
Copyright © 2011-2022 走看看