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