【问题标题】:JSON unicode characters conversionJSON unicode 字符转换
【发布时间】:2015-11-24 07:28:04
【问题描述】:

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

【问题讨论】:

    标签: javascript php json unicode utf-8


    【解决方案1】:

    它不是有效的 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'))。

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2013-01-09
    • 2014-04-14
    • 1970-01-01
    • 2023-03-25
    • 2015-10-27
    • 2010-10-08
    相关资源
    最近更新 更多