我尝试使用Python客户端从Recurly的API创建帐户。 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')
仍会引发相同的错误,但在模块中的另一个级别。
答案 0 :(得分:0)
recurly.API_KEY
和recurly.SUBDOMAIN
必须传递str
个对象。
如果您使用unicode_literals
或配置源提供unicode
值,则可能会遇到麻烦。在这种情况下,如果值不包含非ascii字符或str
,则需要通过encode()
转换它们。
E.g。
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
,从而与使用Recurly客户端时始终为str
的邮件正文的任何非ascii字符冲突
通过这种方式,您可以使用unicode
安全地在任何Recurly资源中分配属性。
E.g。
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