Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python请求模块,需要对主体进行编码,为什么?_Python_Python 3.x_Request - Fatal编程技术网

Python请求模块,需要对主体进行编码,为什么?

Python请求模块,需要对主体进行编码,为什么?,python,python-3.x,request,Python,Python 3.x,Request,我正在努力使用requests模块向web服务发送请求。我在Windows上使用的是Python 3.5.1-32位 每当我请求包含拉丁重音字符(如“á”)的内容时,我都需要将字符串变量显式编码为utf-8。有人能解释一下我为什么要这么做吗 下面是我的代码示例: import requests headers = { "content-type" : "text/xml;charset=UTF-8" } url = '....' body = 'á' requests.post(url, da

我正在努力使用requests模块向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是这样的,我花了很长时间才弄明白这一点。

请求医生说:

:param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
在Python 3中,body='á'是一个unicode字符串。使用方法
encode()
将其转换为字节

对于unicode字符串,请求将其理解为文件内容,并使用八位字节流/base64进行编码。虚假内容将被转移


p/S:它仅适用于Python 3str与Python3中的
str
不同,实际上它不应该是必需的。我总是发送str(),从不发送bytes()。谢谢,我有点理解。我假设python3i中的unicode==utf-8存在完全相同的问题。如何解决Python 2的问题?@kev如果不查看代码的某些部分,很难解决您的问题。