【发布时间】:2017-03-18 14:53:04
【问题描述】:
我想使用python requests 模块从服务器获取数据,但我总是得到字节数据,即使我设置了headers={'content-type':'application/json;charset=utf-8'}。
我的代码:
import requests
from io import BytesIO
headers={'content-type':'application/json;charset=utf-8'}
#response=requests.get("https://api-dev.creams.io/buildings/2/contract- templates",headers=headers)
r = requests.get('https://developer.github.com/v3/timeline.json',headers=headers)
print(r.headers)
# response = urlopen("https://beta.creams.io/")
当我打印标题时,content-type 仍然是text/html;charset-utf-8
我总是得到字节数据。当我使用r.text 时,出现错误:UnicodeEncodeError: 'ascii' codec can't encode character '\u2022' in position 382: ordinal not in range(128)。我使用r.content方法,我总是得到字节数据(以b'开头),我只想得到utf-8编码字符串。我该如何解决?
【问题讨论】:
-
您无法从解码数据中获得
UnicodeEncodeError。您的问题与编码有关。仔细查看 full traceback(将其包含在您的帖子中),它将指向引发异常的实际行。我怀疑这是一个print()调用,或者其他将您的数据写入需要字节的东西(例如,您的终端或控制台需要字节,因此 Python 会为您编码)。 -
另外,当你谈论只想得到utf-8编码的字符串时,你只能谈论字节。 UTF-8 是一种编码,其中 Unicode 文本按照该标准以字节表示。 Unicode 文本未编码,它不是 UTF-anything。
-
我认为你是对的。当我只使用
r.text时没有使用print()方法。它没有错误。但我看不到服务器的响应。我怎样才能让它显示出来? -
@IceWilder 试试
sys.stdout.writelines() -
我使用 sublime text 3 运行 python ,发现打印中文时出现同样的错误
标签: python http-headers python-requests