zoukankan      html  css  js  c++  java
  • 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、多看源码

  • 相关阅读:
    【POJ】3243 Clever Y
    【BZOJ】3916: [Baltic2014]friends
    【URAL】1960. Palindromes and Super Abilities
    【BZOJ】3621: 我想那还真是令人高兴啊
    【BZOJ】2286: [Sdoi2011消耗战
    【POJ】2891 Strange Way to Express Integers
    鬼畜的多项式
    【CF】438E. The Child and Binary Tree
    【BZOJ】3456: 城市规划
    【POJ】1811 Prime Test
  • 原文地址:https://www.cnblogs.com/zhangyuestudying/p/14111705.html
Copyright © 2011-2022 走看看