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、多看源码

URLEncoder使用踩坑的更多相关文章

  1. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  2. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  3. 【踩坑速记】二次依赖?android studio编译运行各种踩坑解决方案,杜绝弯路,总有你想要的~

    这篇博客,只是把自己在开发中经常遇到的打包编译问题以及解决方案给大家稍微分享一下,不求吸睛,但求有用. 1.大家都知道我们常常会遇到dex超出方法数的问题,所以很多人都会采用android.suppo ...

  4. NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters

    /******************************************************************* * 版权所有: * 类 名 称:ExcelHelper * 作 ...

  5. 我的微信小程序入门踩坑之旅

    前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...

  6. router路由去掉#!的踩坑记

    项目中在研究去掉router#!的过程中的踩坑过程.

  7. vue+ vue-router + webpack 踩坑之旅

    说是踩坑之旅 其实是最近在思考一些问题 然后想实现方案的时候,就慢慢的查到这些方案   老司机可以忽略下面的内容了 1)起因  考虑到数据分离的问题  因为server是express搭的   自然少 ...

  8. 记jQuery.fn.show的一次踩坑和问题排查

    最近很少已经很少用jQuery,因为主攻移动端,常用Zepto,其实很多细节和jQuery并不一样.最近又无意中接触到了PC的需求和IE6, 使用了jQuery,刚好踩坑了,特意记录一下. 本文内容如 ...

  9. WebForm路由踩坑 ajax请求多次

    WebForm路由踩坑 再次接触Asp.Net WebForm已是4年后的今天,源起新入职的公司,一个老的项目. Web接触的少,那就多动手写写. WebForm1.aspx <body> ...

随机推荐

  1. synchronized 到底该不该用?

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  2. TypeError: Cannot read property 'Component' of undefined

    继续跟着阮一峰的教程走,下面写到PropTypes的getDefaultProps时,又出现了问题,基于上一个createClass的报错换成了Component写法 错误描述: 解决方法:引入rea ...

  3. Python_scrapyRedis零散

    1. # Redis 1.解压,配环境变量 2.win上设置自启动 redis-server --service-install D:\redis\redis.windows.conf --logle ...

  4. 算法题目:北邮python 3-C 排队前进

    一道python作业的题目,比较有意思,题目如下: 题目描述 有 n 个人排队向一个方向前进,他们前进的速度并不一定相同. 最开始即 t=0 时,每个人的位置并不相同.可以把他们放在数轴上,设他们前进 ...

  5. 02、Spring-HelloWorld

    0. 环境准备 1) jar包 jar包我会帮大家准备好的,所以不用担心找不到Jar包  链接:https://pan.baidu.com/s/1JJcYaspK07JL53vU-q-BUQ 提取码: ...

  6. ubuntu16.04搭建vulhub环境

    简介 Vulhub官方中文教程https://github.com/vulhub/vulhub/blob/master/README.zh-cn.md 环境:ubuntu16.04.5 python3 ...

  7. wordpress 博客环境安装

    WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用. 1.数据库环境 ...

  8. Android系统添加key和keypad

    平台:MTK 一.添加一个按键 1.在DCT tool keypad list 文件增加新按键的选项alps\mediatek\source\dct\Keypad_YuSu.cmp中添加新键,如SMS ...

  9. 在FL Studio中如何做出渐入的人声效果

    当我们在拿到一段人声并想把它加入歌曲中时,如果我们发现人声没有渐入的效果,直接加入到歌曲里出现会变得很突兀的话,我们就需要用到这篇文章所介绍的方法,给人声加上一个渐入的效果. 1. 找到我们需要处理的 ...

  10. 利用MathType在Word里输入几何符号的技巧

    通过学习几何学的知识,我们发现其中包含的几何符号有很多,比如有表示图形的符号,如三角形,平行四边形,圆,角,圆弧等:还有表示位置关系的符号,如平行,垂直等:还有表示矢量等其他符号,那这些符号怎么打出来 ...