2016-09-18 2 views
0

Итак, я пытаюсь запрограммировать простой бот IRC Twitch.tv. Бот читает входящие сообщения в канале, и если сообщения соответствуют определенным шаблонам, бот выполняет определенные задачи. Проблема, которую я получаю, заключается в том, что если пользователь вводит определенные символы Unicode (т.е. если пользователь вводит «¯_ (ツ) _/¯», программа выдаст ошибку и сбой:UnicodeEncodeError с Twitch.tv IRC bot

UnicodeEncodeError не был обработан код пользователя

«CharMap» кодек не может кодировать символ «\ XAF» в позиции 13: символ сопоставляется < 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)

Кто-нибудь знает, как я должен обращаться с этими символами Юникода?

ответ

1

(Прокомментируйте со ссылкой на ответ, но у меня не хватает репутации еще.)

Таким образом, я предполагаю, что вы используете окно? Случается, что кодировка, используемая вашей консолью, не может печатать символы юникода, и это приводит к сбою.

Таким образом, проблема заключается не столько в самом коде, сколько в инструментах. Например, код работает нормально при запуске с консоли linux. Один из способов преодоления этой проблемы, по-видимому, заключается в использовании win-unicode-console, чтобы включить ввод и вывод Unicode с консоли Windows. См. this answer для более подробного описания проблемы и решения.

Вы также можете просто идти вокруг проблемы, если вам просто нужно печатать для целей отладки:

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

Однако, это не является реальным решением, и выход будет что-то вроде

Ь '\ xc2 \ XAF _ (\ XE3 \ x83 \ x84) _/\ xc2 \ XAF \ г \ п'

для вашего примера строки, так что не очень удобно. Я рекомендую прочитать ответ, который я связал.

Смежные вопросы