Amazon SQS:无法使用python / boto发送消息

时间:2014-04-08 13:37:05

标签: python amazon-web-services boto amazon-sqs

我遇到以下问题:当我使用带有固定字符串的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,但不知道如何检查)。

谢谢!

1 个答案:

答案 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