value = u'\u2019'.decode( 'utf-8', 'ignore' )
Строки байтов ДЕКОДИРОВАНЫ в строки Юникода.
Строки Юникода ВКЛЮЧЕНЫ в строки байтов.
Так что, если вы скажете someunicodestring.decode
, он попытается привести строку Юникода кстрока байтов, чтобы иметь возможность декодировать ее (обратно в Unicode!).Будучи неявным преобразованием, этот шаг кодирования будет иметь значение для кодировки по умолчанию, которая может отличаться в разных средах и, вероятно, будет «безопасным» значением ascii
, что, безусловно, приведет к ошибке, которую вы упомянули, поскольку ASCII не может содержатьперсонаж U + 2019.Почти никогда не стоит полагаться на кодировку по умолчанию.
Так что не имеет смысла пытаться decode
строка Unicode.Я почти уверен, что вы имеете в виду:
value = u'\u2019'.encode('utf-8')
(ignore
является избыточным для кодирования в UTF-8, поскольку нет символа, который эта кодировка не может представлять.)