【问题标题】:How to remove Byte Order Mark in python如何在python中删除字节顺序标记
【发布时间】:2014-07-03 13:03:41
【问题描述】:

这个问题与我最近报告的堆栈溢出 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的适当方法是什么?

【问题讨论】:

    标签: python byte-order-mark


    【解决方案1】:

    response.text 是一个 Unicode 对象,即。 e.已经解码了,不能再解码了。

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

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

    请参阅docs for more background info

    【讨论】:

      猜你喜欢
      • 2015-01-01
      • 2010-09-22
      • 1970-01-01
      • 2011-04-21
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 2014-12-04
      相关资源
      最近更新 更多