Переменная line
в вашем коде является объектом unicode
.Когда вы вызываете line.replace
, Python ожидает, что первый аргумент также будет unicode
объектом.Если вместо этого вы предоставите объект str
, Python попытается автоматически декодировать его в строку unicode
, используя системную кодировку по умолчанию (которую вы можете проверить с помощью sys.getdefaultencoding()
).
Очевидно, системная кодировкаascii
в вашем случае.Строка байтов '„'
не может быть декодирована с использованием кодека ascii
, поскольку '„'
не является символом ACII, что приводит к появлению Исключения, которое вы видите.
Вы можете решить проблему, изменив системная кодировка по умолчанию к той же, которую вы использовали для предоставления строки '„'
(CP1252, я полагаю), однако такое исправление интересно только с академической точки зрения, поскольку оно просто скрывает проблему под ковром.
Надлежащим, безопасным и простым решением вашей проблемы было бы просто предоставить объект unicode
для метода replace
.Это будет так же просто, как заменить '„'
на u'„'
в вашем коде.