2015-06-22 2 views
0

Я очень новичок в python. Я пытаюсь отправить сообщения на сервер CCS android, используя скрипт python. Я получаю сообщения от RabbitMQ, а затем отправляю их в CCS через XMPP. Мой код основан на примере кода с сайта Android. Он выглядит следующим образом:python 'ascii' codec не может кодировать символы

client = xmpp.Client('gcm.googleapis.com', debug=['socket']) 
client.connect(server=(SERVER,PORT), secure=1, use_srv=False) 
auth = client.auth(USERNAME, PASSWORD) 
if not auth: 
    print 'Authentication failed!' 
    sys.exit(1) 

client.RegisterHandler('message', message_callback) 

# RabbitMQ Start .... 

connection = pika.BlockingConnection(pika.ConnectionParameters(
     host='localhost')) 
channel = connection.channel() 

print ' [*] Waiting for messages. To exit press CTRL+C' 

def callback(ch, method, properties, body): 
    global client 
    body = body.replace("\\","") 
    try: 
     send_queue.append(body) 
     client.Process(1) 
     flush_queued_messages() 
    except Exception as ex: 
     print ex 


channel.basic_consume(callback, 
         queue=GCMQUEUE, 
         no_ack=True) 

channel.start_consuming() 

Это работает очень хорошо. Но моя проблема в том, когда я смайлики в моей очереди я получаю его в шестнадцатеричном формате, как 22 \ XE2 \ x91 \ xa223 и происходит следующее сообщение об ошибке:

python 'ascii' codec can't encode characters in position 366-367: ordinal not in range 

Я попытался заменить строку:

send_queue.append(body) 

Для

send_queue.append(body.encode('ascii','ignore')) 

Таким образом, я могу игнорировать эту ошибку, но это удаляет все символы Юникода. Как это исправить?

+0

Ошибка возникает при кодировании 'unicode' в' str', trail '.encode ('utf-8')' в переменную 'unicode' – LittleQ

+0

Как я уже упоминал im new в python. Не могли бы вы объяснить в деталях? –

+0

Вы можете узнать переменную 'unicode' в соответствии с сообщениями об ошибках или показать нам путаницу. – LittleQ

ответ

1

Вы должны обеспечить входное значение body быть строкой, если не использовать str(body) затем кодировать его, как указано в комментариях, str(body).encode('utf-8')

Если это строка уже вобще body.encode('utf-8')