我使用的是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对象而没有问题,那么为什么我不能在头中放一个呢?在
报头不是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 :
相关问题 更多 >
编程相关推荐