我在通过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')])
答案 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