Amazon SQS:无法使用Python/boto发送消息
我遇到了一个问题:当我使用 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