编码出现+号,传到后端接口被替换成了空格问题解决

情况如下:

	public static void main(String[] args) {
				String orderDescription = "订购成功立即生效,30天内可观看专区中除单独计费影片外的所有内容,到期自动取消。";
		orderDescription = Base64.encode(orderDescription, "gbk");
		System.out.println(orderDescription);
		orderDescription = orderDescription.replace("+", "%2B");
		System.out.println(orderDescription);
		orderDescription = Base64.decodeStr(orderDescription, "gbk");
		System.out.println("==========================================");
		System.out.println(orderDescription);
	}

在这里插入图片描述

对这段中文进行编码后,出现了+号,导致,传给后端接口出现部分乱码现象
在这里插入图片描述
那么,导致这个问题的原因,就是Tomcat把+号换成了’ '空格。
这个是HTML规范中的规定,在这里算是个小坑,但是有不能说是bug

解决办法1:
对编码后的字符串进行替换

orderDescription = orderDescription.replace("+", "%2B");

那么,到后端接口后,会自动把 %2B 替换回+号,于是,可以正常解码了

来看下JDK中处理方式:

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

public static void main(String[] args) throws UnsupportedEncodingException {
        String testStr="space here";
        String afterEncode= URLEncoder.encode(testStr,"UTF-8");
        System.out.println("1.beforeEncode: " + testStr);
        System.out.println("2.afterEncode: "+afterEncode);
        String afterDecode= URLDecoder.decode(afterEncode,"UTF-8");
        System.out.println("3.afterDecode: "+afterDecode);
        String replace = afterEncode.replace("+", "%20");
        System.out.println("4.replace: "+replace);
        String replaceDecode = URLDecoder.decode(replace, "UTF-8");
        System.out.println("5.replaceDecode: "+replaceDecode);
}

在这里插入图片描述

参考:
这一篇讲的非常详细,提出了三种解决方案
https://www.cnblogs.com/thisiswhy/p/12119126.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值