socket.io的 Python客户端中文encode问题
admin
2023-07-31 01:46:39
0

socketIO-client是python实现的SocketIO客户端。

问题

当接收到中文消息时出现下方错误,简单说就是编码问题。

Traceback (most recent call last):
  File \"sub.py\", line 24, in 
    socketIO.wait()
  File \"/usr/local/lib/python3.5/site-packages/socketIO_client/__init__.py\", line 232, in wait
    self._process_packets()
  File \"/usr/local/lib/python3.5/site-packages/socketIO_client/__init__.py\", line 254, in _process_packets
    for engineIO_packet in self._transport.recv_packet():
  File \"/usr/local/lib/python3.5/site-packages/socketIO_client/transports.py\", line 155, in recv_packet
    six.b(packet_text))
  File \"/usr/local/lib/python3.5/site-packages/six.py\", line 620, in b
    return s.encode(\"latin-1\")
UnicodeEncodeError: \'latin-1\' codec can\'t encode characters in position 21-27: ordinal not in range(256)

解决方法

  1. 找到socketIO_client的安装路径,例中跟six.py在同一目录下,路径是/usr/local/lib/python3.5/site-packages/socketIO_client/.

  2. 找到socketIO_client文件夹下的transports.py文件

  3. 用编辑器打开transports.py,在144行左右的位置找到recv_packet函数

    def recv_packet(self):
        try:
            packet_text = self._connection.recv()
        except websocket.WebSocketTimeoutException as e:
            raise TimeoutError(\'recv timed out (%s)\' % e)
        except websocket.SSLError as e:
            raise ConnectionError(\'recv disconnected by SSL (%s)\' % e)
        except websocket.WebSocketConnectionClosedException as e:
            raise ConnectionError(\'recv disconnected (%s)\' % e)
        except socket.error as e:
            raise ConnectionError(\'recv disconnected (%s)\' % e)
        engineIO_packet_type, engineIO_packet_data = parse_packet_text(
            six.b(packet_text))
        yield engineIO_packet_type, engineIO_packet_data
  4. 修改倒数第二行six.b(packet_text))six.u(packet_text)),修改后保存.

  5. 再次运行代码接收中文消息,代码正常运行.

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...