ОП в трудном для чтения комментарии к другому ответу имеет пример, который начинается следующим образом ...:
comment = comment.encode('ascii', 'ignore')
comment = '\xc3\xa4\xc3\xb6\xc3\xbc'
Это, конечно, с двумя операторами в этом порядке, было бы другой ошибкой (первый пытается получить доступ к comment
, но только второе связывает это имя), но давайте предположим, что две строки взаимозаменяемы, так как следующим образом:
comment = '\xc3\xa4\xc3\xb6\xc3\xbc'
comment = comment.encode('ascii', 'ignore')
Это, которое действительно может привести к ошибке, которую OP, по-видимому, имеет в этом трудном для чтения комментарии, является проблемой по другой причине: comment
- это строка байтов (без начального u
перед открывающей кавычкой) ), но .encode
применяется к строке unicode - поэтому Python в первую очередь пытается создать временный юникод из этой строки с помощью кодека по умолчанию ascii
, и это, конечно, не удается, поскольку строка содержит символы не ascii.
Вставка ведущего u
в этот литерал будет работать:
comment = u'\xc3\xa4\xc3\xb6\xc3\xbc'
comment = comment.encode('ascii', 'ignore')
(это, конечно, оставляет comment
пустым, поскольку все его символов игнорируются). В качестве альтернативы - например, если исходная строка байтов исходит из другого источника, а не из литерала:
comment = '\xc3\xa4\xc3\xb6\xc3\xbc'
comment = comment.decode('latin-1')
comment = comment.encode('ascii', 'ignore')
здесь, второе утверждение явно строит юникод с кодеком, который кажется применимым к этому примеру (конечно, только предположение: вы не можете с уверенностью сказать, какой кодек должен применяться из простого просмотра пустой строки! - ), затем третий снова удаляет все символы, не относящиеся к ascii (и снова оставляет comment
пустым).