【发布时间】:2015-06-08 06:50:31
【问题描述】:
我必须将 unicode 字符串传递给 JSONObject。
JSONObject json = new JSONObject("{\"One\":\"\\ud83c\\udf45\\ud83c\\udf46\"}");
json.put("Two", "\ud83c\udf45\ud83c\udf46");
System.out.println(json.toString());
但我有这个:
{"One":"????????","Two":"????????"}
我想要这个:
{"One":"\ud83c\udf45\ud83c\udf46","Two":"\ud83c\udf45\ud83c\udf46"}
【问题讨论】:
-
你试过转义你的字符串吗?
json.put("Two", "\\ud83c\\udf45\\ud83c\\udf46"); -
我有这个:{"One":"????????","Two":"\\ud83c\\udf45\\ud83c\\udf46"}
-
@LutzHorn:阅读JSON spec,第 9 节...
-
@LutzHorn: 如果码位在基本多语言平面(U+0000 到 U+FFFF),那么它可以表示为一个六字符序列:一个反斜线,后跟小写字母 u,后跟四个对代码点进行编码的十六进制数字...要转义不在基本多语言平面中的代码点,字符表示为十二个字符序列,编码UTF-16 代理对。因此,例如,仅包含 G 谱号字符 (U+1D11E) 的字符串可以表示为“\uD834\uDD1E”。
-
@LutzHorn:我的 cmets 会告诉你它们是有效的 Unicode 字符。根据我引用的 JSON 规范第 9 节,它们被编码为 UTF-16 代理对。
\ud83c\udf45代表U+1F345 TOMATO和\ud83c\udf46代表U+1F346 AUBERGINE。
标签: java unicode jsonobject