python - 如何在 python 中删除字节顺序标记

标签 python byte-order-mark

这个问题与我报告的 Stack Overflow API 最近的变化有关 here .在那个问题中,我收到了 response这似乎行得通,但实际上我无法让它工作。

这是我的代码

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 的合适方法是什么?

最佳答案

response.text 是一个 Unicode 对象,即。 e.它已经被解码,所以你不能再解码它。

您需要做的是告诉response 对象它应该使用哪种编码:

response = requests.get(url)
response.encoding = "utf-8-sig"
respose.text

参见 docs for more background info .

关于python - 如何在 python 中删除字节顺序标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24554458/

相关文章:

python - CSV python sort() 仅输出从最低到最高的数字,而不是相反

python - 如何根据标准过滤、总结和 reshape 数据框

c++-cli - 使用 FileStream 编写没有 BOM 的流?

python - 迭代 PANDAS DATAFRAME 时添加、删除、编辑行和列

python - MRJob 中的 mapper_pre_filter

php - PHP 文件中的 UTF-8 BOM 签名

PHP 无法正确解析 CSV(文件为 UTF-16LE)

powershell - 从生成的字符串(不是文件)中去除 BOM

python - 拟合后绘图不更新

vim - 为什么 VIM 会忽略我文件的 BOM?