我遇到了这个我似乎无法解码的奇怪 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 字符串 - JSON 仅支持\u 后的 4 个十六进制数字。 PHP 和 JS 的结果都是正确的。
无法使用标准函数对此进行解码。
你从哪里得到这个 JSON 字符串?
关于您想要获取的字符串的正确 json - 它应该是 "\u2514\u2500\u2500 mystring"
,或者只是 "└── mystring"
(json支持除 "
和 \
之外的字符串中的任何 unicode 字符。
此外,如果您需要对一些需要两个以上字节的字符进行编码 - 这将导致两个转义码,例如 "𩄎"
将是 "\ud864\udd0e"
转义时。
所以,如果你真的需要解码上面的字符串 - 你可以在解码之前修复它,通过正则表达式将 \uffffffe2
替换为 \uffff\uffe2
(对于 js 来说它会类似于:s.replace(/(\\u[A-Fa-f0-9]{4})([A-Fa-f0-9]{4})/gi,'$1\\u$2')
)。
但是无论如何,上面指定的字符串中的字符代码看起来不正确。
关于javascript - JSON unicode字符转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32291309/