标题字段可以请求.post是unicode对象吗?

2024-06-28 15:41:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是pythonrequests 2.2.1,并尝试用一个定制的头来发布一个请求。在

我正在创建我自己的头,myheader,如下所示:

myheader = {'name' : myvalue }

问题是myvalue是一个unicode对象。我不是把它编码成字节字符串,而是直接把它放到myheader字典中。在

当我这样做的时候:

^{pr2}$

我有个例外:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 17-18: ordinal not in range(128)

我想我可以在把它放入header字典之前做myvalue.encode('utf8')来消除它——但我的问题是,在报头中放一个unicode对象是非法的吗?我这样问是因为响应可以包含unicode对象而没有问题,那么为什么我不能在头中放一个呢?在


Tags: 对象字符串namein编码字典字节ascii
1条回答
网友
1楼 · 发布于 2024-06-28 15:41:03

报头不是unicode数据,不是。它们不是POST正文的一部分(POST body是根据需要编码的,可以包含任何二进制数据)。在

绝大多数HTTP报头对只需要ASCII字符集的信息进行编码。例如,Accept-Language报头只包含ISO-639语言代码,以及可选的ISO-3166国家代码,外加q;=和数字信息。在

人们普遍认为,HTTP报头也可能包含拉丁语-1(ISO-8859-1)字符(因此直到Unicode U+00FF);特别是,HTTP 1.1 Warning header specification使用拉丁语-1作为默认值。如果需要对拉丁语1范围之外的标题中的文本进行编码,请对RFC 2047之后的文本进行编码。在Python中,可以使用^{} objects

from email.header import Header

myheader = {'name': str(Header(u'Some unicode value', 'utf-8'))}

相关问题 更多 >