我是python的新手。我正在尝试使用python脚本向android CCS服务器发送消息。我从RabbitMQ获取消息,然后通过XMPP将其发送到CCS。我的代码基于android网站的示例代码。它看起来如下:
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'))
这样我可以忽略错误,但这会删除所有unicode字符。 如何解决这个问题?
答案 0 :(得分:1)
您应该确保body
的输入值为字符串,如果不使用str(body)
,则按照评论中提到的那样对其进行编码,str(body).encode('utf-8')
如果它是一个字符串,则只需执行body.encode('utf-8')