繁体   English   中英

python'ascii'编解码器无法编码字符

[英]python 'ascii' codec can't encode characters

我是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字符。 如何解决呢?

您应该确保body的输入值为字符串,如果不使用str(body)则按照注释str(body).encode('utf-8')进行编码。

如果已经是字符串,请执行body.encode('utf-8')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM