javascript - JSON unicode字符转换

标签 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 字符串的任何想法。

最佳答案

这不是有效的 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/

相关文章:

javascript - 我在哪里可以获得印度的 .geojson 文件,而不是每个州/地区或任何其他区别的单独文件?

Delphi 中的 JSON 数组

javascript - 如何将循环值传递到JavaScript中以逗号分隔的字符串中

php - 当我从数组中检索一个对象时,对象数组是空的

php - 从 MySQL 返回相同的结果 - 我知道为什么但不知道解决方案

php - foreach 循环没有得到下一个结果

javascript - Json-server 依赖于 uuid 而不是 id

javascript - 将带有表单数组的表单转换为有效的 json 对象

javascript - jQuery "by attribute"选择器

javascript - ramda js 与 find、pick 和 trim 值组合