python - 用于下载信息的 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 下载不适合我的需要。
任何帮助表示赞赏!谢谢!
解决方案
您是否尝试使用 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'
推荐阅读
- python - 如何在 html 文件中返回有效的 MultiSelectField 数据
- python - open3d 中的 draw_geometries 函数使程序崩溃并出现以下错误:进程以退出代码 -1073741819 (0xC0000005) 完成
- ansible - Ansible 剧本和角色
- sql - 使用 Oracle 的 JSON_ARRAY 函数时删除反斜杠?
- flutter - Flutter 集成测试如果发生异常不会失败
- mysql - 指定为定义者 (''@'') 的用户不存在
- microsoft-teams - Teams 选项卡应用程序 - 在 Teams 之外隐藏 html 视图
- scala - 如何在一定的时间间隔内将 for 循环置于睡眠状态(scala)
- azure-devops - 执行 VSTS 查询并使用 API 获取其所有详细信息
- javascript - Django 响应代码 200 React 接受错误代码