【问题标题】:UnicodeEncodeError with Twitch.tv IRC botUnicodeEncodeError 与 Twitch.tv IRC 机器人
【发布时间】:2017-01-26 10:41:53
【问题描述】:

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

UnicodeEncodeError 未被用户代码处理

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

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

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)

有人知道我应该如何处理这些 un​​icode 字符吗?

【问题讨论】:

    标签: python unicode bots irc twitch


    【解决方案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'

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

    【讨论】:

      猜你喜欢
      • 2018-12-31
      • 2017-05-13
      • 1970-01-01
      • 2012-07-28
      • 2012-08-20
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多