#python #byte-order-mark
#python #метка порядка байтов
Вопрос:
Этот вопрос связан с недавним изменением в Stack Overflow API, о котором я сообщил здесь. На этот вопрос я получил ответ, который, похоже, сработает, но на практике я не могу заставить его работать.
Это мой код
import requests
import json
url="https://api.stackexchange.com/2.2/sites/?filter=!*L1*AY-85YllAr2)amp;pagesize=1amp;page=1"
response = requests.get(url)
response.text
Это выводит
u'ufeff{"items":[{"site_state":"normal","api_site_parameter":"stackoverflow","name":"Stack Overflow"}],"has_more":true,"quota_max":300,"quota_remaining":294}'
Начало u'ufeff
означает, что если я это сделаю response.json()
, я получу ValueError: No JSON object could be decoded
Мне было предложено использовать decode('utf-8-sig')
. Однако, похоже, я тоже не могу заставить эту работу работать:
Попробуйте 1:
response.text.decode('utf-8-sig')
UnicodeEncodeError: 'ascii' codec can't encode character u'ufeff' in position 0: ordinal not in range(128)
Попробуйте 2:
json.loads(response.text).decode('utf-8-sig')
ValueError: No JSON object could be decoded
Каков подходящий способ удалить начало u'ufeff
?
Ответ №1:
response.text
является объектом Unicode, т. Е. он уже был декодирован, поэтому вы не можете декодировать его снова.
Что вам нужно сделать, это указать response
объекту, какую кодировку он должен использовать:
response = requests.get(url)
response.encoding = "utf-8-sig"
respose.text
Смотрите документы для получения дополнительной справочной информации.