JSON unicode字符转换

时间:2015-08-29 22:30:13

标签: javascript php json unicode utf-8

我遇到了这个奇怪的JSON,我似乎无法解码。 为简化起见,我们假设它是一个JSON字符串:

"\uffffffe2\uffffff94\uffffff94\uffffffe2\uffffff94\uffffff80\uffffffe2\uffffff94\uffffff80 mystring"

解码后,它应如下所示:

└── mystring

JS或PHP似乎无法正确转换它。

js> JSON.parse('"\uffffffe2\uffffff94\uffffff94\uffffffe2\uffffff94\uffffff80\uffffffe2\uffffff94\uffffff80 mystring"')
ffe2ff94ff94ffe2ff94ff80ffe2ff94ff80 mystring

PHP表现相同

php> json_decode('"\uffffffe2\uffffff94\uffffff94\uffffffe2\uffffff94\uffffff80\uffffffe2\uffffff94\uffffff80 mystring"')
ffe2ff94ff94ffe2ff94ff80ffe2ff94ff80 mystring

欢迎任何有关如何正确解析此JSON字符串的想法。

1 个答案:

答案 0 :(得分:2)

它是无效的JSON字符串 - JSON在\ u之后仅支持4个十六进制数字。 PHP和JS的结果都是正确的。

使用标准功能无法对此进行解码。

你从哪里获得这个JSON字符串?

关于要获取的字符串的正确json - 它应该是"\u2514\u2500\u2500 mystring",或者只是"└── mystring"(json支持除"\之外的字符串中的任何unicode字符)

此外,如果您需要对某些需要两个以上字节的字符进行编码 - 这将导致两个转义码,例如""在转义时为"\ud864\udd0e"

所以,如果你真的需要解码上面的字符串 - 你可以在解码之前修复它,通过regexp将\uffffffe2替换为\uffff\uffe2(对于js,它将类似于:s.replace(/(\\u[A-Fa-f0-9]{4})([A-Fa-f0-9]{4})/gi,'$1\\u$2')) 。

但无论如何,上面指定的字符串中的字符代码看起来不正确。