使用Twitch.tv IRC bot的UnicodeEncodeError

时间:2016-09-18 18:46:08

标签: python unicode bots irc twitch

所以我正在尝试编写一个简单的Twitch.tv IRC机器人。机器人读取通道中的传入消息,如果消息与某些模式匹配,则机器人执行某些任务。我得到的问题是,如果用户输入某些unicode字符(即如果用户输入“¯_(ツ)_ /¯”,程序将抛出错误并崩溃:

UnicodeEncodeError未被用户代码

处理

'charmap'编解码器无法对位置13中的字符'\ xaf'进行编码:字符映射到< undefined>

现在,我希望我的程序能够处理这些输入,但我不知道要更改或添加到我的代码中以启用此功能。这是我的代码:

http://pastebin.com/EBTaqpbZ(我无法弄清楚如何使用Stackoverflow代码粘贴)

我收到错误的代码的主要部分是:

while True:                                                     #Main Loop
    response = s.recv(1024).decode("utf-8")
    if response == "PING :tmi.twitch.tv\r\n":                   #If Ping, return Pong
        s.send("PONG :tmi.twitch.tv\r\n".encode("utf-8"))
        print("Pong Successful")
    else:                                                       #Else, Decode User Message
        username = re.search(r"\w+", response).group(0)         #Gets User
        message = CHAT_MSG.sub("", response)                    #Gets Message
        print (username + ": " + message)                       #Prints User Message
        if message.find("!hello") != -1:                        #Simple Test command to see if Reading Chat Input
            chat ("Hello! I'm speaking!\r\n")
    time.sleep(1 / cfg.RATE)

错误似乎总是发生在代码行上:print (username + ": " + message)

有谁知道我应该如何处理这些unicode字符?

1 个答案:

答案 0 :(得分:1)

(会回复一个答案的链接,但我还没有足够的声誉。)

那么,我假设您正在使用Windows?发生的事情是控制台使用的编码无法打印unicode字符,这会导致崩溃。

所以问题不在于代码本身,而在于使用的工具。例如,从Linux控制台运行时代码运行正常。解决此问题的一种方法似乎是使用win-unicode-console来启用Windows控制台的unicode输入和输出。有关问题和解决方案的更详细说明,请参阅this answer

如果你只是需要打印用于调试目的,你也可以解决这个问题:

msg = username + ": " + message
print (msg.encode("utf-8")) 

但是,这不是一个真正的解决方案,输出将类似于

  

B' \ XC2 \ XAF _(\ XE3 \ X83 \ X84)_ / \ XC2 \ XAF \ r \ n'

为您的示例字符串,所以不太方便。我建议阅读我链接的答案。