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个汉字。




  • 相关阅读:
    目录 —— C语言数据结构与算法分析
    目录 —— STM32裸机
    目录 —— FreeRTOS
    常用存储器介绍
    DMA(Data Memory Access)直接存储器访问
    命令
    文件数据流向
    野指针产生的原因
    内存四区
    SVG 是什么?
  • 原文地址:https://www.cnblogs.com/jpfss/p/9894629.html
Copyright © 2011-2022 走看看