我遇到了这个似乎无法解码的奇怪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字符串的想法都将受到欢迎。

最佳答案

这不是有效的JSON字符串-\ u后JSON仅支持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'))。

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

10-06 04:49
查看更多