我遇到了这个奇怪的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字符串的想法。
答案 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')
) 。
但无论如何,上面指定的字符串中的字符代码看起来不正确。