在提供非ascii字符时,python客户机循环引发UnicodeDecodeError
我正在尝试使用Python客户端从Recurly的API创建帐户。 Python2.7,重复2.2.17 当使用包含非ascii字符(以在提供非ascii字符时,python客户机循环引发UnicodeDecodeError,python,unicode,utf-8,recurly,Python,Unicode,Utf 8,Recurly,我正在尝试使用Python客户端从Recurly的API创建帐户。 Python2.7,重复2.2.17 当使用包含非ascii字符(以unicode格式获取)的名字(或任何其他属性)创建新帐户时,保存实体会引发UnicodeDecodeError:“ascii”编解码器无法解码字节[…] 一个简单的account.first_name=u'Frédérique Fançois''encode('utf-8')仍然会引发相同的错误,但在模块中处于另一个级别。重复出现。API_键和重复出现。子域必
unicode
格式获取)的名字(或任何其他属性)创建新帐户时,保存实体会引发UnicodeDecodeError:“ascii”编解码器无法解码字节[…]
一个简单的
account.first_name=u'Frédérique Fançois''encode('utf-8')
仍然会引发相同的错误,但在模块中处于另一个级别。重复出现。API_键
和重复出现。子域
必须传递str code>对象
如果您正在使用或您的配置源提供unicode
值,您可能会遇到麻烦。在这种情况下,如果值不包含非ascii字符,则需要通过str
转换,或者使用encode()
转换
例如
这样做可以确保底层的httplib
不会将HTTP头转换为unicode
,从而与消息正文中的任何非ascii字符冲突,在使用Recurly客户端时,消息正文始终是str
通过这种方式,您可以使用unicode
在任何递归资源中安全地分配属性
例如
有关问题的详细演示、解决方法和问题来源的解释,请参见(注意,import unicode\u literals
,它将默认字符串类型更改为unicode):请在回答中内联包含外部描述。查看引用的描述,这似乎是因为您有来自未来的导入unicode文本的。问题只会出现在罕见的情况下,即用户将Unicode对象作为API\u键
或子域
传递。是的,就是这样,但是使用Unicode
而不是str
是一种很好的做法。或者更简单地使用Python3,它解决了unicode支持方面的问题。他们会想知道为什么他们必须从str
生成str
才能作为API\u KEY
和SUBDOMAIN
@AlastairMcCormack通过感谢您的建议,我考虑了这些建议来改进答案
from __future__ import unicode_literals
# You can force it like this
account.API_KEY = str('my api key here')
account.SUBDOMAIN = str('advanseez')
account = recurly.Account(account_code='12345689', first_name=u'Frédérique-François')
account.save() # Works without raising UnicodeDecodeError