如何让Twisted的私信接受非ASCII字符串
我有一个用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 完全不支持字符集,这就是你能做到的最好情况。