HttpEntity如果直接使用EntityUtils.toString会得到含有Unicode的奇怪字符串
例如直接toString拿到的JSON是这样的:
中间含有很多Unicode码,如果对这个字符串做处理,后续的变量会全部变成Unicode码
可以使用以下函数对返回的String做转换,将含Unicode字符串转换成UTF-8:
/**
* 含unicode字符串转utf-8
* @author https://blog.csdn.net/u013905744/article/details/74452012/
*/
public static String unicodeToString(String str) {
Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");
Matcher matcher = pattern.matcher(str);
char ch;
while (matcher.find()) {
String group = matcher.group(2);
ch = (char) Integer.parseInt(group, 16);
String group1 = matcher.group(1);
str = str.replace(group1, ch + "");
}
return str;
}
举个例子:
HttpEntity entity = response.getEntity();
if (entity != null) {
String result = unicodeToString(EntityUtils.toString(entity));
//System.out.println(result);
}
转换后的JSON就会变成:
可以看到Unicode乱码已经被替换成汉字。