你以为的"="真的还在吗?
- 问题背景:
前端输入"="分隔符,以Json的格式存入数据库,然后升级应用将,数据库存入的配置信息重写配置文件,神奇的发现服务器上需要指定的分隔符变成了"\u003d"
- 问题复现
java
System.out.print(new Gson().toJson(<http://www.baidu.com/id=1>));
结果出乎意料的是:www.baidu.com/id/u003d1
特殊字符(如等号=
)被转换为Unicode转义序列(如\u003d
),如上所示"="成了 "u003d"
- 问题原因
因为Gson默认会对这些特殊字符进行HTML转义,以确保生成的JSON字符串符合JSON规范。如果你不希望这些字符被转义
-
解决方案
- 禁用HTML转义
javaGson gson = new GsonBuilder().disableHtmlEscaping().create();
2.手动替换
javajson = json.replace("\\u003d", "=");
- 工具类转换
javaString json = StringUtils.unescapeJava(json);
-
总结
程序员人生,不仅在于思考,更在于动手实践。 你仅仅去看这个Bug,估计一辈子都看不出原因。