0

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

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

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

4

1 回答 1

0

recurly.API_KEY并且recurly.SUBDOMAIN必须传递str对象。

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

例如

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 标头转换为unicode因此与消息正文中出现的任何非 ascii 字符冲突,这str在使用 Recurly 客户端时始终存在。

这样,您可以使用unicode.

例如

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

于 2015-11-18T15:18:42.410 回答