递归 python 客户端在提供非 ascii 字符时引发 UnicodeDecodeError

Recurly python client raising UnicodeDecodeError when supplying non-ascii characters

我正在尝试使用 Python 客户端从 API 的 Recurly 创建帐户。 Python 2.7,递归 2.2.17

使用包含非 ascii 字符(作为 unicode 获取)的名字(或任何其他属性)创建新帐户时,保存实体会引发 UnicodeDecodeError: 'ascii' codec can't decode byte [...]

一个简单的 account.first_name = u'Frédérique-Fançois'.encode('utf-8') 仍然会引发相同的错误,但在模块的另一个级别。

recurly.API_KEYrecurly.SUBDOMAIN 必须传递 str objects.

如果您使用 unicode_literals 或者您的配置源提供 unicode 值,您可能会遇到麻烦。在这种情况下,如果值不包含 non-ascii 个字符,则需要通过 strencode().

来转换它们

例如

from __future__ import unicode_literals

# You can force it like this
account.API_KEY = str('my api key here')
account.SUBDOMAIN = str('advanseez')

这样做可以确保底层 httplib 不会将 HTTP headers 转换为 unicode 从而与任何 non-ascii 字符冲突,从而显示消息 body使用 Recurly 客户端时总是 str

这样您就可以使用 unicode.

在任何 Recurly 资源中安全地分配属性

例如

account = recurly.Account(account_code='12345689', first_name=u'Frédérique-François')
account.save()  # Works without raising UnicodeDecodeError

有关问题的详细演示、解决方法和问题根源的解释,请参阅(注意 import unicode_literals 的使用,它将默认字符串类型更改为 Unicode):https://gist.github.com/maximehardy/d3a0a6427d2b6791b3dc