资讯专栏INFORMATION COLUMN

socket.io的 Python客户端中文encode问题

jsyzchen / 3081人阅读

摘要:是实现的客户端。问题当接收到中文消息时出现下方错误,简单说就是编码问题。

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)
解决方法

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

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

用编辑器打开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

修改倒数第二行six.b(packet_text))six.u(packet_text)),修改后保存.

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37982.html

相关文章

  • socket.io之一: 介绍

    摘要:在标准没有推出之前,轮询是唯一可行的方式通过浏览器也可以,但这里不做讨论。这种方式存在延时且对服务端造成很大负载。直到年,才标准化一种基于套接字进行收发数据的协议。现如今主流浏览器均已支持。 socket.io提供了基于事件的实时双向通讯 历史 Web端与服务器间的实时数据传输的是一个很重要的需求,但最早只能通过AJAX轮询询实现。在WebSocket标准没有推出之前,AJAX轮询是唯...

    william 评论0 收藏0
  • python编码问题

    摘要:在控制台执行命令中文,可以将解释为命令,中文,从而到到对象。中文以上的对象其实是,即字节码,若终端是编码的话,那么就是用的字节码。那么这里的是什么呢默认是,这正是错误为什么报无法用解码的原因中文将默认编码改为,即可。 问题 在平时工作中,遇到了这样的错误: UnicodeDecodeError: ascii codec cant decode byte 想必大家也都碰到过,很常见 。于...

    forsigner 评论0 收藏0
  • Python中文编码问题

    摘要:使用中文替代中文中文编码中文编码中有以上两种声明字符串变量的方式,它们的主要区别是编码格式的不同,其中,的编码格式和文件声明的编码格式一致,而的编码格式则是。 字符串是Python中最常用的数据类型,而且很多时候你会用到一些不属于标准ASCII字符集的字符,这时候代码就很可能抛出UnicodeDecodeError: ascii codec cant decode byte 0xc4 ...

    Cheriselalala 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<