zeromq:不允许使用unicode,使用send_unicode

时间:2015-03-12 12:17:32

标签: python sockets unicode utf-8 zeromq

我在通过ROUTER SOCKET发送字符串时在zeromq python上收到错误。字符串类型消息成功发送,但有时,unicode消息抛出异常"Type Error: unicode not allowed. use send_unicode".虽然我一直在尝试使用msg.encode('utf-8')。我不知道如何克服它。 我在python 2.7.3上。我没有使用pyzmq(仅导入zmq)。期待你的建议:)谢谢

如果是套接字中的后端:

        request=backend.recv_multipart()
        #print ("Backend Thread is ready")
        worker_id,client_id = request[:2]

        if client_id != b"READY" and len(request) > 3:
            #print (len(request))
            empty2,reply  = request[2:]
            router_socket.send_multipart([client_id, reply.encode('utf-8')])

3 个答案:

答案 0 :(得分:1)

问题得到了解决只是我需要通过使用string.encode(' ascii')

将unicode字符串转换回ascii。

答案 1 :(得分:0)

所以,因为 PyZMQ 实际上是一个很好的库,所以他们有一些文档。
https://pyzmq.readthedocs.io/en/latest/unicode.html

它说的是 str 对象在 Python 进化的历史过程中改变了它的本质。
在 Python 3 中 str 是字符的集合,而在 Python 2 中它是 char* 的简单包装器(带有一些糖),我们知道来自 C :)。
文档解释了为什么 pyZMQ 背后的人选择明确差异 - 性能就是答案。
要在 Python3 中发送字符串,您应该使用正确的方法,即 send_string,对于 Python2 可能正好相反(要发送 unicode,您应该使用 send_unicode)。
然而,建议坚持使用字节并在需要时明确提供正确的编码和解码。

您还使用 pyzmq...模块名称“zmq”来自 pyzmq 库/包。
要面对此语句,请使用:pip list | grep zmq(或 pip list | select-string zmq for Windows)。

答案 2 :(得分:-1)

我遇到了同样的错误。我的错误代码是:

/html/head

您必须将消息转换为二进制文件才能解决。为此,只需像这样添加socket.send("Server message to client3")

b