在提供非ascii字符时,python客户机循环引发UnicodeDecodeError

在提供非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_键和重复出现。子域必

我正在尝试使用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_键
重复出现。子域
必须传递
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