Первая ошибка
Код, который вы предоставили, будет работать, так как текст является строкой байтов (так как вы используете Python 2).Но то, что вы пытаетесь сделать, это декодировать из строки UTF-8 в ASCII, что возможно, но только если эта строка Unicode содержит только символы, имеющие эквивалент ASCII (вы можете увидеть список символов ASCII здесь ).В вашем случае он сталкивается с символом Unicode (в частности, ☂), который не имеет эквивалента ASCII.Вы можете обойти это поведение, используя:
string.decode('UTF-8', 'ignore')
, который будет просто игнорировать (т.е. заменять ничем) символы, которые не могут быть закодированы в ASCII.
Вторая ошибка
Эта ошибка более интересна.Похоже, что текст, который вы пытаетесь кодировать в UTF-8, содержит либо NULL-байты, либо определенные управляющие символы , которые не разрешены версией Unicode (UTF-8), которую выпытаются закодировать в.Опять же, код, который вы фактически предоставили, работает, но что-то в тексте, который вы пытаетесь кодировать, нарушает кодировку.Вы можете попробовать тот же трюк, что и выше:
string.encode('UTF-8', 'ignore')
, который просто удалит оскорбительные символы, или вы можете посмотреть, что именно в вашем текстовом вводе вызывает проблему.