我正在关注Unicode - How to get the characters right?帖子。
我唯一的问题是使用JSONObject编码(我正在使用org.json
lib)。
当我在JSONObject中放置像àòùè쀀
之类的字符串时会出现问题。
System.out.println(entry.getValue());
JSONObject temp = new JSONObject();
temp.put("values", entry.getValue();
System.out.println(temp.toString());
我获得àòùè쀀
和{"values":"àòùèì\u20ac\u20ac"}
而不是{"values":"àòùè쀀"}
。
修改
通过从哈希表传递到jsonObject,使用扩展的utf-8编码。例如,哈希表
{€èòàùì€ù=èòàù€ì, €òàèùì€=èòàù€ìç§$}
成为JSONObject
{"\u20acòàèùì\u20ac":"èòàù\u20acìç§$","\u20acèòàùì\u20acù":"èòàù\u20acì"}
答案 0 :(得分:2)
它们完全相同,Unicode转义占用更多空间。就像在Java中编写\u004a
一样,与编写a
完全相同。如果你关注的是正确性,那也没关系。
除非你的大部分文字介于0x2000 - 0x20FF之间,否则它不会占用相当多的额外空间:
The following code转义C0和C1控制字符,但它也转义为0x2000 - 0x20FF:
if (c < ' ' || (c >= '\u0080' && c < '\u00a0')
|| (c >= '\u2000' && c < '\u2100')) {
因此,0x2000 - 0x20FF和控制字符之间的任何字符都表示为unicode转义。这对于控制字符是有意义的,因为它们在未转义形式的JSON中是不允许的。
对于0x2000 - 0x20FF,我不知道因为代码没有被注释。在该范围内未转义的每个字符都是有效的JSON。 Of course, 0x2028
and 0x2029
are not valid in Javascript(所以这个小细节使JSON语法不是Javascript语法的一个子集),所以如果它被用作真正的Javascript JSONP,最好逃避JSON中的那些。但是我不清楚为什么代码会逃避整个范围,因为范围内只有2个字符是非法的。