无法解读Unicode序列的困难

时间:2018-05-22 04:01:25

标签: json unicode notepad++ ansi utf

我有一些来自我无法控制的源的大型JSON文件,我想在将它们用作程序输入之前在Notepad ++中进行清理。

该文件包含许多unicode序列,遗憾的是我很少知道。它是使用两个或三个序列来表示一个字符的类型,例如é表示\ u00c3 \ u00a9,以及表示字符串( - )的\ u00e2 \ u0080 \ u0094。

我花了一整夜的时间谷歌搜索如何将这些转换回普通角色,但不幸的是我对我遇到的内容并不了解。

我最终弄清楚通过安装HTML Tag插件,我可以在它们上使用“Decode JS”,然后将整个文件转换为ANSI,然后将其表示为UTF-8,从而修复了的问题最的角色。

但有些人,比如em dash或Ç(\ u00c3 \ u0087),仍然拒绝转换。

有人可以指出我为什么这些特殊字符仍然显示错误,以及我如何解决它?感谢。

2 个答案:

答案 0 :(得分: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

输出:

éâÃ
é—Ç

答案 1 :(得分:0)

您只需将文件导入需要JSON数据的JavaScript程序,解析JSON文件,然后将结果传递给decodeURIComponent方法。在下面的代码片段中,我有一个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转义序列类型的问题中提供更多信息,我们将不胜感激。