Python 3 и русские символы: print('Всем привет!') ведёт к UnicodeEncodeError: 'ascii' codec can't encode... ошибке

1,00
р.
Пишу обычную программу print('Всем привет!') и запускаю python3.4 main.py, а в ответ:
Traceback (most recent call last): File "main.py", line 1, in print('\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!') UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
Система:
webapp: ~/Applications $ uname -a Linux webapp 3.13.0-29-generic 53-Ubuntu SMP Wed Jun 4 21:00:20 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Ответ
Питон использует кодировку терминала для печати, которая не имеет никакого отношения к sys.getdefaultencoding().
Иногда переменные окружения, определяющие язык, такие как LANGUAGE, LC_ALL,LC_CTYPE, LANG могут быть не установлены, например, в окружении используемом ssh, upstart, Salt, mod_wsgi, crontab, etc. В этом случае используется C (POSIX) локаль, которая использует ascii кодировку, что приводит к UnicodeEncodeError ошибке, т.к. русские буквы не представимы в ascii. В Python 3.7, реализована PEP 540: Forced UTF-8 Runtime Mode: utf-8 режим включается по умолчанию для "C" локали.
Серверные варианты Linux могут использовать C локаль по умолчанию. Настольные инсталяции дитрибутивов Linux обычно имеют utf-8 локаль.
Ошибка в вопросе связана с Питон багом: Python 3 raises Unicode errors with the C locale. Разработчики решили следовать ascii кодировке из C локали, даже если это ошибка в подавляющем большинстве случаев, но в Python 3.7 ситуация может улучшится в поведении по умолчанию, см. PEP 538 -- Coercing the legacy C locale to a UTF-8 based locale.
Чтобы временно изменить используемую кодировку можно определить PYTHONIOENCODING:
$ PYTHONIOENCODING=utf-8 python your-script.py
В качестве более постоянного решения, нужно убедиться что используется utf-8 локаль в окружении, которое запускает python. Не обязательно русскую локаль устанавливать, чтобы напечатать русский текст. В этом достоинство Юникода, что можно работать с многими языками одновременно. Например, существует C.UTF-8 локаль.
Если locale -a не показывает ни одной utf-8 локали, то на Debian системах следует установить locales пакет и выбрать utf-8 локаль для использования:
root# aptitude install locales root# dpkg-reconfigure locales
Индивидульно, каждый пользователь может настроить переменные окружения (см. Не сохраняются переменные XUBUNTU ), например:
export LANG=en_US.UTF-8
Используется первая доступная переменная из списка: LC_ALL, LC_CTYPE, LANG.
Может потребоваться сконфигурировать для работы с utf-8 индивидуальные программы, такие как xterm, Gnome Terminal, screen, отдельно.