2014-04-08 68 views
0

我遇到了以下問題:當我使用帶有固定字符串的SQSConnection.send_message方法作爲參數(無重音字符)時,它按預期工作。但是,當我得到消息正文(使用get_messages)並嘗試將其再次發送到同一隊列時,出現此錯誤:亞馬遜SQS:不能使用python/boto發送消息

UnicodeEncodeError:'ascii'編解碼器無法編碼字符u'\ xea'in位置38:序號不在範圍內(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,但不知道如何檢查)。

謝謝!

回答

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