gpt4 book ai didi

python - 在 Python 中解析包含 "\u as UTF-8 bytes"的 JSON

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:36 24 4
gpt4 key购买 nike

我有一个来自 Facebook 的“下载您的数据”功能的 JSON 文件,它没有转义 Unicode 字符作为它们的代码点编号,而是转义为 UTF-8 字节序列。

例如,字母 á (U+00E1) 在 JSON 文件中被转义为 \u00c3\u00a1 而不是 \u00e1。 0xC3 0xA1是U+00E1的UTF-8编码。

Python 3 中的 json 库将其解码为 ¡,对应于 U+00C3 和 U+00A1。

有没有办法在 Python 中正确解析这样的文件(以便我得到字母 á)?

最佳答案

他们似乎使用 utf-8 将 Unicode 字符串编码为字节,然后将字节转换为 JSON。这是他们非常糟糕的行为。

Python 3 示例:

>>> '\u00c3\u00a1'.encode('latin1').decode('utf-8')
'á'

您需要解析 JSON 并遍历整个数据以修复它:

def visit_list(l):
return [visit(item) for item in l]

def visit_dict(d):
return {visit(k): visit(v) for k, v in d.items()}

def visit_str(s):
return s.encode('latin1').decode('utf-8')

def visit(node):
funcs = {
list: visit_list,
dict: visit_dict,
str: visit_str,
}
func = funcs.get(type(node))
if func:
return func(node)
else:
return node

incorrect = '{"foo": ["\u00c3\u00a1", 123, true]}'
correct_obj = visit(json.loads(incorrect))

关于python - 在 Python 中解析包含 "\u as UTF-8 bytes"的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50315834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com