字节类型上的UnicodeDecodeError

2024-10-05 11:01:10 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python 3.4,我在尝试使用utf-32解码字节类型时遇到以下错误

Traceback (most recent call last):
  File "c:.\SharqBot.py", line 1130, in <module>
    fullR=s.recv(1024).decode('utf-32').split('\r\n')
UnicodeDecodeError: 'utf-32-le' codec can't decode bytes in position 0-3: codepoint not in range(0x110000)

当试图将其解码为utf-16时

  File "c:.\SharqBot.py", line 1128, in <module>
    fullR=s.recv(1024).decode('utf-16').split('\r\n')
UnicodeDecodeError: 'utf-16-le' codec can't decode byte 0x0a in position 374: truncated data

当我使用utf-8解码时没有错误。s是连接到80端口上的twitch IRC服务器IRC.chat.twitch.tv的套接字。

它收到以下信息:

b':tmi.twitch.tv 001 absolutelyabot :Welcome, GLHF!\r\n:tmi.twitch.tv 002 absolutelyabot :Your host is tmi.twitch.tv\r\n:tmi.twitch.tv 003 absolutelyabot :This server is rather new\r\n:tmi.twitch.tv 004 absolutelyabot :-\r\n:tmi.twitch.tv 375 absolutelyabot :-\r\n:tmi.twitch.tv 372 absolutelyabot :You are in a maze of twisty passages, all alike.\r\n:tmi.twitch.tv 376 absolutelyabot :>\r\n'

当我试图解码到utf 16和32时,我做错了什么吗?我想使用utf-32的原因是,有时有人发送一个不在utf-8中的字符,我希望能够接收到这个字符,而不是它抛出一个错误,因为utf-8不支持该字符。 谢谢你的帮助。


Tags: inpy错误linetv解码字符utf
3条回答

如果decode作为UTF-8不起作用,则每个Unicode序数都可以用UTF-8表示,这是因为正在传输的字节采用不同的编码,或者数据是文本和二进制数据的混合,并且只有一部分是UTF-8。很可能是文本UTF-8编码的(大多数网络协议都是),因此非UTF-8数据将是帧数据或类似数据,需要进行解析以提取文本数据。

任何试图在文本/二进制情况下掩盖此类错误的尝试都将只是消除问题,而不是修复它们。您需要知道数据的编码(以及格式,如果不是所有的文本数据都有一个编码),然后使用它。你收到的数据不会神奇地变成UTF-16或UTF-32,因为你想要它。

您可以尝试使用decode/encode('utf-16-le')。我试过了,没关系。但我不太清楚为什么。:P页

尝试使用编码='ISO-8859-1'

相关问题 更多 >

    热门问题