我正在努力使用请求模块向Web服务发送请求。我在Windows上使用Python 3.5.1-32位。
每当我请求包含拉丁语重音字符(例如“á”)的内容时,我需要将我的字符串变量显式编码为utf-8。有人可以解释为什么我需要这样做吗?
这是我的代码示例:
import requests
headers = { "content-type" : "text/xml;charset=UTF-8" }
url = '....'
body = 'á'
requests.post(url, data=body, headers=headers)
这不起作用,服务器收到该角色的转义版本,但如果我在请求之前添加此内容:
body = body.encode(encoding='utf-8')
有效。
有人可以解释为什么这是必要的吗?我的Python-Fu是这样的,我花了很长时间来解决这个问题。
答案 0 :(得分:2)
请求 doc说:
:param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
在 Python 3 body='á'
中是一个unicode字符串。使用方法encode()
,您将其转换为字节。
对于unicode字符串,请求将其理解为文件内容,并使用 octet-stream / base64 进行编码。虚假内容将被转移。
P / S:仅适用于 Python 3 。 Python 2的str
与Python 3中的str
不一样