У меня много проблем "не удается закодировать" и "не удается декодировать" с Python, когда я запускаю свои приложения из консоли. Но в IDE EclipsePyDev кодировкой символов по умолчанию установлено значение UTF-8, и я в порядке.
Я искал кодировку по умолчанию, и люди говорят, что Python удаляет sys.setdefaultencoding функцию при запуске, и мы не можем ее использовать.
Итак, какое лучшее решение для этого?
Переведено автоматически
Ответ 1
Вот более простой метод (взлом), который возвращает вам setdefaultencoding() функцию, которая была удалена из sys:
import sys # sys.setdefaultencoding() does not exist, here! reload(sys) # Reload does the trick! sys.setdefaultencoding('UTF8')
(Примечание для Python 3.4+: reload() находится в importlib библиотеке.)
Однако делать это небезопасно: очевидно, что это взлом, поскольку sys.setdefaultencoding() намеренно удаляется из sys при запуске Python. Повторное включение и изменение кодировки по умолчанию может нарушить работу кода, который использует ASCII по умолчанию (этот код может быть сторонним, что обычно делает его исправление невозможным или опасным).
PS: Похоже, этот взлом больше не работает с Python 3.9.
Ответ 2
Если вы получаете эту ошибку при попытке передать / перенаправить вывод вашего скрипта
Ошибка UnicodeEncodeError: кодек 'ascii' не может кодировать символы в позиции 0-5: порядковый номер не входит в диапазон (128)
Просто экспортируйте PYTHONIOENCODING в консоль, а затем запустите свой код.
export PYTHONIOENCODING=utf8
Ответ 3
A) Для управления sys.getdefaultencoding() выводом:
Наконец: вы можете использовать A) или B) или оба!
Ответ 4
Начиная с PyDev 3.4.1, кодировка по умолчанию больше не изменяется. Подробности смотрите в этом тикете.
Для более ранних версий решение состоит в том, чтобы убедиться, что PyDev не запускается с UTF-8 в качестве кодировки по умолчанию. В Eclipse запустите диалоговое окно настроек ("запустить конфигурации", если я правильно помню); вы можете выбрать кодировку по умолчанию на вкладке "Общие". Измените ее на US-ASCII, если вы хотите, чтобы эти ошибки появлялись "раньше" (другими словами: в вашей среде PyDev). Также смотрите оригинальное сообщение в блоге об этом обходном пути.