如何在JSON Java中将utf8字符串转换为转义字符串?

daolsyd0  于 2022-12-20  发布在  Java
关注(0)|答案(1)|浏览(294)

我想在JSON对象的值中将UTF-8字符串转换为escape \uXXX格式。
我使用了JSON Object和Gson,但在本例中不起作用:

JSONObject js = new JSONObject();
js.put("lastReason","nguyễn");
System.out.println(js.toString());

以及

Gson gson = new Gson();
String new_js = gson.toJson(js.toString());
System.out.println(new_js);

输出:{“测试”:“阮”}

但是我期望我结果是:

预期产出:{“测试”:“用户\u1 EC 5 n”}

你们有什么办法的,帮我解决吧。

s4n0splo

s4n0splo1#

可以使用apache commons-text库将字符串更改为使用Unicode转义序列。在将文本添加到JSONObject之前,请使用org.apache.commons.text.StringEscapeUtils转换文本。

StringEscapeUtils.escapeJava("nguyễn")

将产生

nguy\u1EC5n

使用StringEscapeUtils的一个可能的问题是它也会转义控制字符。如果字符串末尾有制表符,它将被转换为\t。即:

StringEscapeUtils.escapeJava("nguyễn\t")

将产生不正确的字符串:

nguy\u1EC5n\t

你可以使用org.apache.commons.text.translate.UnicodeEscaper来解决这个问题,但是它会将字符串中的每个字符都转换成Unicode转义序列,即:

UnicodeEscaper ue = new UnicodeEscaper();
ue.translate(rawString);

将产生

\u006E\u0067\u0075\u0079\u1EC5\u006E

or 

\u006E\u0067\u0075\u0079\u1EC5\u006E\u0009

这是不是一个问题由你来决定。

相关问题