【问题标题】:Difficulties unescaping Unicode sequences取消转义 Unicode 序列的困难
【发布时间】:2018-10-31 17:50:51
【问题描述】:

我有一些来自我无法控制的大型 JSON 文件,我正在尝试在 Notepad++ 中清理它们,然后再将它们用作程序输入。

该文件包含许多 unicode 序列,遗憾的是我对此知之甚少。它是使用两个或三个序列来表示一个字符的类型,例如 \u00c3\u00a9 表示 é,而 \u00e2\u0080\u0094 表示一个破折号 (—)。

我花了一整夜在谷歌上搜索如何将这些转换回普通字符,但不幸的是我不太了解我遇到的很多内容。

我最终发现,通过安装 HTML Tag 插件,我可以在它们上使用“Decode JS”,然后将整个文件转换为 ANSI,然后将其表示为 UTF-8,这解决了 的问题大多数角色。

但有些,如破折号或 Ç (\u00c3\u0087),仍然拒绝转换。

谁能指出为什么这些特定字符仍然显示不正确,以及我该如何解决?谢谢。

【问题讨论】:

    标签: json unicode notepad++ ansi utf


    【解决方案1】:

    JSON 一开始就写错了。字符串数据可能写入配置为存储 latin1 数据的数据库,但写入编码为 UTF-8,然后作为 latin1 数据读回。

    如果您使用 JSON 库读取 JSON,则数据中的字符串需要编码为 latin1 以反转错误,然后解码为 UTF-8 以正确解释它。

    以下是 Python 3 中的示例:

    #!coding:utf8
    import json
    
    raw = '"\u00c3\u00a9\u00e2\u0080\u0094\u00c3\u0087"' # Your é—Ç examples.
    data = json.loads(raw)
    print(data) # garbage
    print(data.encode('latin1').decode('utf8')) # corrected
    

    输出:

    éâÃ
    é—Ç
    

    【讨论】:

      【解决方案2】:

      您可以将文件导入需要 JSON 数据的 JavaScript 程序,解析 JSON 文件,然后将结果传递给 decodeURIComponent 方法。在下面的代码 sn-p 中,我有一个 mini-JSON 字符串,然后我会对其进行解析,但您可以将 json 变量的值替换为您的文件。

          var json = `{"data" : "\u0024 equals the Dollar sign"}`
          var res = JSON.parse(json)
          console.log(res)
          var result = decodeURIComponent(res["data"]);
      console.log(result)

      但是,我无法识别您提供的 Unicode 序列的“类型”,例如 em 破折号的转义序列。如果您可以在您的问题中提供有关文件中 Unicode 转义序列类型的更多信息,我们将不胜感激。

      【讨论】:

        猜你喜欢
        • 2021-01-30
        • 2014-02-28
        • 1970-01-01
        • 2014-09-17
        • 1970-01-01
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        相关资源
        最近更新 更多