我遇到以下问题:当我使用带有固定字符串的SQSConnection.send_message方法作为参数(没有重音字符)时,它按预期工作。但是当我得到消息的主体(使用get_messages)并尝试将其再次发送到同一队列时,我收到此错误:
UnicodeEncodeError:'ascii'编解码器无法对位置38中的字符u'\ xea'进行编码:序数不在范围内(128)
这些消息是直接从Amazon Web Console编写的,并且有一些“;”字符和一些重音,如“õ”和“ã”。我该怎么办?我已按照此处的建议使用set_message_class(RawMessage)
Using python BOTO with AWS SQS, getting back nonsense characters
但它只适用于接收消息。我正在使用Ubuntu 12.04,从存储库安装python-boto(我认为它是版本2.22,但不知道如何检查)。
谢谢!
答案 0 :(得分:2)
send_message只能处理字节字符串(str类)。您从SQS收到的是Unicode字符串(unicode类)。您需要通过调用encode(' utf-8')将Unicode字符串转换为字节字符串。
如果您混合使用了字符串类型,则可能需要将Unicode字符串有条件地编码为字节字符串。
if type(message_body) is unicode:
message_content = message_body.encode('utf-8')
else:
message_content = message_body