• 为什么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个汉字。




  • 相关阅读:
    6174问题
    阶乘的精确值
    小学生算术
    Primer回顾 数组和指针
    Primer回顾 标准库类型
    绪论
    字符串的存储
    条款39:明智而审慎的使用private继承
    条款34:区分接口继承和实现继承
    条款33:避免遮掩继承而来的名称
  • 原文地址:https://www.cnblogs.com/jpfss/p/9894629.html
Copyright © 2020-2023  润新知