Gson处理数据时会默认将一些字符转为Unicode形式,针对这个问题,做为记录。
.
最近在写一个信息传输接口时,碰到一个问题,两种表现。
就是当文字中包含
',",=,<,>这5个符号时,使用google gson包处理数据时,将其自动转为\u003c,\u0027等字符,在提交数据到服务中时,导致上传数据后不能按照预设的格式进行处理而出现错误。另外一种情况就是当传输数据为实际字符(以上提到的5个符号)时,某些服务防火墙会拦截下来,认为是恶意请求,这个时候通过gson或者其他方式处理进行转码,才能正常提交。
针对以上两种情况,说下google gson的两种处理方式,如下
/**
* 对象转换成json字符串(以上5个特殊符号会自动转码)
*
* @param obj
* @return
*/
public static String toJson(Object obj) {
Gson gson = new Gson();
return gson.toJson(obj);
}
/**
* 对象转换成json字符串(不将obj中的特殊符号进行unicode编码)
* @param obj
* @return
*/
public static String toJsonNoUnicode(Object obj){
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
return gson.toJson(obj);
}
其他场景分析,暂时只列出以上接口外一种,比如上传头像时,部分公司将图片转成base64再上传,而在base64的末尾是有== 这个字符的,那么如果自动转码,服务端则不能正常处理,所以需要根据业务进行判断是否需要转码。
在使用Gson处理包含特殊字符如,的数据时,Gson会将其转换为Unicode形式,导致服务端处理异常。同时,某些情况下,直接传输这些字符可能会被防火墙拦截。本文介绍了Gson处理这种情况的两种方式,并提醒在特定业务场景(如base64编码的图片上传)中需要注意是否需要转码。

4026

被折叠的 条评论
为什么被折叠?



