在提供非ascii字符时,重复python客户端引发UnicodeDecodeError

时间:2015-11-18 15:18:09

标签: python unicode utf-8 recurly

我尝试使用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')仍会引发相同的错误,但在模块中的另一个级别。

1 个答案:

答案 0 :(得分:0)

recurly.API_KEYrecurly.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