如何让Twisted的私信接受非ASCII字符串

1 投票
1 回答
820 浏览
提问于 2025-04-16 21:46

我有一个用Python写的IRC机器人,它使用了Twisted这个库。

它可以顺利地打印出非ASCII字符的字符串,使用的代码是self.msg(channel, str.encode('utf-8')

不过,当我收到私信(privmsg)时,如果是非ASCII字符的字符串,就会出现异常。

def privmsg(self, user, channel, msg):
    msg = msg.encode('utf-8')
    user = user.split('!', 1)[0]
    [... code goes here...]

我遇到的异常是:

 File "/usr/lib64/python2.4/site-packages/twisted/words/protocols/irc.py", line 1498, in handleCommand
  method(prefix, params)
File "/usr/lib64/python2.4/site-packages/twisted/words/protocols/irc.py", line 1043, in irc_PRIVMSG
  self.privmsg(user, channel, message)
File "./IlyBot.py", line 58, in privmsg
  msg = msg.encode('utf-8')
exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xd1 in position 4: ordinal not in range(128)

有没有人知道怎么强制把收到的私信编码设置为UTF-8?

1 个回答

3

我觉得你想要的是“解码”,而不是“编码”。传给 privmsg 的参数是一个字节串(在 Python 2.x 中是 str),所以如果你想把它变成文本,就得对这些字节进行 码。

你不能强行把编码设置为 UTF-8,因为编码是你从服务器收到的内容决定的。由于 IRC 完全不支持字符集,这就是你能做到的最好情况。

撰写回答