• URLEncoder使用踩坑


    URLEncoder使用

    背景介绍

    今天需要传一些描述信息给前端,需要写在header里面,所以要先编码成utf-8的格式,再有前端解码获取。

    工作过程

    前提:我要传给前端的文字是我从中台那边拿到的。

    public class URLEncoderTest {
    
        @Test
        public void test_01() throws UnsupportedEncodingException {
            String str = "这是前台给我的数据 ";
            final String encode = URLEncoder.encode(str, "utf-8");
            System.out.println(encode); // 
        }
    }
    // 打印出来的结果:
    //%E8%BF%99%E6%98%AF%E5%89%8D%E5%8F%B0%E7%BB%99%E6%88%91%E7%9A%84%E6%95%B0%E6%8D%AE+
    

    末尾莫名其妙出来了一个“+”。我想了很久都没想明白,我以为是java编码的原因,还暗自嘲讽了一下,然后我采用了一个非常low的方式解决了这个问题。

    手动给解码后的字符串删除'+'号,经过实验,前端可以完美的解码。

    System.out.println(StringUtils.remove(encode, '+'));
    //%E8%BF%99%E6%98%AF%E5%89%8D%E5%8F%B0%E7%BB%99%E6%88%91%E7%9A%84%E6%95%B0%E6%8D%AE
    

    review的时候,同事提出了意见,问我这里为什么要加上这一行,我解释完之后,同时表示帮我排查下原因,然后他不到五分钟就发现了。

    我获取到的字符串里有空格。

    我去中台看了我填入的描述信息,果然是有空格的。

    public class URLEncoderTest {
    
        @Test
        public void test_01() throws UnsupportedEncodingException {
            String str = "这是前台给我的数据";
            final String encode = URLEncoder.encode(str, "utf-8");
            System.out.println(encode); 
        }
        // 打印结果
      //%E8%BF%99%E6%98%AF%E5%89%8D%E5%8F%B0%E7%BB%99%E6%88%91%E7%9A%84%E6%95%B0%E6%8D%AE
    }
    

    URLEncoder#encode分析

    粘贴一部分代码

    for (int i = 0; i < s.length();) {
        int c = (int) s.charAt(i);
        if (dontNeedEncoding.get(c)) {
            // 当 c 是 ‘’ 时,将 c 赋值为 ‘+’,然后加到out上
            if (c == ' ') {
                c = '+';
                needToChange = true;
            }
            out.append((char)c);
            i++;
        }
    }
    

    所以会出现"+"

    总结

    1、要细心,程序员这一行一定要细心!

    2、多问人(前提是你要有愿意帮你的人)

    3、多看源码

  • 相关阅读:
    Golden Tiger Claw (KM算法)
    Xor Sum题解>----(思维+递归)
    Mister B and PR Shifts(思维)
    Traffic Real Time Query System-(点双缩点+LCA)
    最大的位或----(极简代码)
    萌萌哒题解_倍增并查集
    连续攻击游戏(递增1)题解------(并查集)
    道路与航线 (连通块Dijkstra+拓扑序||spfa+slf优化)
    美团校招-表达式求值
    天猫前端电话面试
  • 原文地址:https://www.cnblogs.com/zhangyuestudying/p/14111705.html
Copyright © 2020-2023  润新知