首页 > 解决方案 > 用于下载信息的 JSON facebook 的编解码器是什么?

问题描述

我必须处理从 Facebook 下载的 JSON 文件以及我的所有信息。我将管理 JSON 本身,但在开始处理文件之前我遇到了问题。我无法确定下载文件的编解码器。我尝试在 Win 和 Mac 上使用 Jupyter Notebook 下的 Python 3。代码如下:

f = open("testefc.json", "r", encoding="iso-8859-1")
f.read()

我尝试了 utf-8、latin1 和其他几个,但似乎没有一个可以正确翻译。我的文件有这个文本:

"Voc\u00c3\u00aa est\u00c3\u00a1 num processo de sele\u00c3\u00a7\u00c3\u00a3o"

我知道这意味着"você está num processo de seleção"。我可以尝试替换每个代码,但我认为必须有更简单的方法。不幸的是,使用 html 下载不适合我的需要。

任何帮助表示赞赏!谢谢!

标签: pythonjsonfacebookutf-8iso-8859-1

解决方案


您是否尝试使用 utf-8 编码打开文件?您的方法提到了 latin-1 和 utf-8,因此我认为您可能混淆了编码并且没有正确解码 json 文件。尝试

>>> f = open('testefc.json', 'r', encoding='utf-8')
>>> f.read()
'Você está num processo de seleção'
>>> f.close()

请注意,这相当于以二进制模式打开文件(未指定编码)然后手动解码

>>> f = open('testefc.json', 'rb')
>>> f.read().decode('utf-8')
'Você está num processo de seleção'
>>> f.close()

似乎您错误地将 json 文件解码为 latin-1,但原始文本编码是 utf-8(与 facebook.com 页面源代码比较:)<meta charset="utf-8" />。当您再次将示例文本编码为 latin-1 并将其解码为 utf-8 时,您将获得正确解码的 Python 字符串。

>>> l = 'Voc\u00c3\u00aa est\u00c3\u00a1 num processo de sele\u00c3\u00a7\u00c3\u00a3o'.encode('latin1')
>>> s = l.decode('utf-8')
>>> s
'Você está num processo de seleção'

推荐阅读