为什么zmq.setsockopt_string会抱怨默认的'ascii'代码?

 手机用户2602887045_745 发布于 2022-12-29 17:08

我试图弄清楚我的开发环境是否以某种方式搞砸了,因为"它适用于[我的同事]计算机",但不是我的.我没有找到问题的"肉",而是在研究我发现的第一个有趣的事情.

我有一些代码,没有理由为什么一个调用可以工作,另一个不是:

import sys
import zmq

if __name__ == "__main__":
    print sys.getdefaultencoding()  # Displays 'ascii'

    zContext = zmq.Context()
    zSocket = zContext.socket(zmq.SUB)

    # This works.
    zSocket.setsockopt_string( zmq.SUBSCRIBE, "Hello".decode('ascii'))

    # This fails with error... why?
    # raise TypeError("unicode strings only")
    #
    # Shouldn't the default encoding for "Hello" be ascii?
    # zSocket.setsockopt_string( zmq.SUBSCRIBE, "Hello")

    zSocket.connect( "tcp://localhost:5000")

我假设对setsockopt_string的工作调用,我传递的是ascii字符数组.在破碎的代码中,我必须发送不是ascii而不是unicode的东西.我怎么知道什么传递给setsockopt_string?

也许这甚至不是要问的问题.我只是很困惑.

任何帮助都会很棒.

这是我的环境:

python --version
Python 2.7.3
#1 SMP Debian 3.2.57-3+deb7u2 x86_64 GNU/Linux

谢谢.

1 个回答
  • 由设置为setsockopt_string方法的unicode / str值引起的遇到的问题,快速解决方法是:

    zSocket.setsockopt_string(zmq.SUBSCRIBE, b"Hello")
    

    这将传递字节而不是字符串,或者如果在那里有变量,则应该这样写:

    zSocket.setsockopt_string(
        zmq.SUBSCRIBE,
        bytes("Hello", encoding="latin-1")
    )
    

    这将适用于python 2和3

    2022-12-29 17:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有