Что такое кодек для JSON facebook для загрузки информации? - PullRequest
0 голосов
/ 01 октября 2019

Мне приходится иметь дело с файлом JSON, который я скачал с Facebook, со всей моей информацией. Сам JSON я справлюсь, но у меня возникла проблема ДО того, как я начну работать с файлами. Я не могу определить кодек для загруженного файла. Я пробовал на Win и Mac, используя Python 3 под Jupyter Notebook. Код следующий:

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 не соответствует моим потребностям.

Любая помощь приветствуется! Спасибо!

1 Ответ

0 голосов
/ 01 октября 2019

Вы пытались открыть файл с кодировкой 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файл в латиницу-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'
...