Функция str.encode
принимает необязательный аргумент, определяющий обработку ошибок:
str.encode([encoding[, errors]])
Из документов:
Возвращает закодированную версию строки. Кодировка по умолчанию - текущая кодировка строки по умолчанию. ошибки могут быть заданы для установки другой схемы обработки ошибок. По умолчанию для ошибок используется «строгий», что означает, что ошибки кодирования вызывают UnicodeError. Другими возможными значениями являются ignore, replace, xmlcharrefreplace, backslashreplace и любое другое имя, зарегистрированное с помощью codecs.register_error (), смотрите раздел Базовые классы кодеков. Список возможных кодировок см. В разделе «Стандартные кодировки».
В вашем случае может быть интересна функция codecs.register_error
.
[Примечание о плохих символах ]
Кстати, обратите внимание, что при использовании register_error
вы, скорее всего, замените не только отдельные плохие символы, но и группы последовательных плохих символов своей строкой, если не будете обращать на это внимание. Вы получаете один вызов обработчика ошибок за запуск плохих символов, а не за символ.