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 3068 Bridge Across Islands
    XidianOJ 1086 Flappy v8
    XidianOJ 1036 分配宝藏
    XidianOJ 1090 爬树的V8
    XidianOJ 1088 AK后的V8
    XidianOJ 1062 Black King Bar
    XidianOJ 1091 看Dota视频的V8
    XidianOJ 1098 突击数论前的xry111
    XidianOJ 1019 自然数的秘密
    XidianOJ 1109 Too Naive
  • 原文地址:https://www.cnblogs.com/zhangyuestudying/p/14111705.html
Copyright © 2011-2022 走看看