如何在Python中移除字节顺序标记

5
这个问题涉及到我在这里报告的Stack Overflow API的最新更改。在那个问题中,我收到了一个响应,看起来可以工作,但实际上我无法使其工作。
这是我的代码:
import requests
import json
url="https://api.stackexchange.com/2.2/sites/?filter=%21%2AL1%2AAY-85YllAr2%29&pagesize=1&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个回答

10
response.text 是一个Unicode对象,也就是说它已经被解码过了,所以你不能再次解码它。
你需要做的是告诉 response 对象应该使用哪种编码方式:
response = requests.get(url)
response.encoding = "utf-8-sig"
response.text

请查看文档以获取更多背景信息

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接