【问题标题】:Why I always get bytes data from server when used python requests module?为什么我在使用 python 请求模块时总是从服务器获取字节数据?
【发布时间】: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 tr​​aceback(将其包含在您的帖子中),它将指向引发异常的实际行。我怀疑这是一个 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


【解决方案1】:

这应该可以正常工作:

import requests as req
r = req.get('https://developer.github.com/v3/timeline.json')
print(r.text)

【讨论】:

  • 还是同样的错误。Traceback (most recent call last): File "/Users/zhangpenghao/Documents/python/test.py", line 9, in <module> print(r.text) UnicodeEncodeError: 'ascii' codec can't encode character '\u2022' in position 382: ordinal not in range(128)
猜你喜欢
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
相关资源
最近更新 更多