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

0 投票
1 回答
1589 浏览
提问于 2025-04-18 01:52

我遇到了一个问题:当我使用 SQSConnection.send_message 方法,并且传入一个固定的字符串(没有重音符号的字符)时,一切正常。但是,当我获取一条消息的内容(用 get_messages 方法)并尝试把它再次发送到同一个队列时,我收到了这个错误:

UnicodeEncodeError: 'ascii' 编码无法在位置 38 编码字符 u'\xea':序号不在范围内(128)

这些消息是直接从亚马逊的网页控制台写入的,里面有一些“;”字符,还有一些带重音的字符,比如“õ”和“ã”。我该怎么办呢?我已经按照这里的建议使用了 set_message_class(RawMessage)

使用 python BOTO 和 AWS SQS,收到无意义的字符

但这只对接收消息有效。我使用的是 Ubuntu 12.04,python-boto 是从软件库安装的(我想它是 2.22 版本,但不知道怎么查看)。

谢谢!!

1 个回答

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

撰写回答