Почему я получаю эту ошибку, когда пытаюсь что-то напечатать в Putty?
Вопрос
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 38: ordinal not in range(128)
Я загружаю сайт, а затем распечатываю его содержимое ... просто. Должен ли я как-то это кодировать?
Решение
Для начала попробуйте utf-8. Загружаемый веб-сайт может иметь другую кодировку, чем ANSI, и эти дополнительные символы нельзя распечатать на консоли.
Поэтому там, где вы печатаете текст
, вместо этого печатаете text.encode ('utf-8')
.
Другие советы
Убедитесь, что Putty настроен на прием данных в кодировке UTF-8.
print
загрузка содержимого в стандартный вывод может быть проблематичной, поскольку Python часто не знает, какую кодировку символов использует система. На первый взгляд этот Python 2 предполагает наиболее консервативный выбор, ASCII США. Поэтому, когда вы пытаетесь напечатать строку, содержащую символы, которых нет в ASCII, например, умную цитату U + 2019 & # 8217;
, вы получите эту ошибку.
В Python 3 по умолчанию для sys.stdout.encoding
в кодировке используется UTF-8. Если вы уверены, что ваш стандартный вывод (т. Е. PuTTY в вашем случае) должен принимать UTF-8, то да, вы можете явно его кодировать:
print content.encode('UTF-8')