Как видно из скриншота, один и тот же сценарий, запускаемый из терминала и Gedit, ведет себя по-разному - в терминальном сценарии выполняется успешно, а в Gedit возникает ошибка:
Но если я изменю python
в диспетчере инструментов Gedit на PYTHONIOENCODING=utf-8 python
, то скрипт будет нормально выполняться и из Gedit
. Почему, и какие настройки в Терминале позволяют коду Python "Unicode" выполняться без проблем?
Просто чтобы обновить, как я добавил награду: Это не только GEdit, но и в SciTE возникает ошибка, но не в Geany, поскольку Geany выполняет скрипты Python через терминал
Терминал позволяет «unicode» коду Python выполняться без проблем, потому что он правильно установил sys.stdout.encoding
.
Я изменяю сценарий, как показано ниже:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
print sys.stdout.encoding
print u"富强"
Запустите в Gedit, вывод: None
для sys.stdout.encoding
.
Запустить в Терминале, выходное значение равно UTF-8
для sys.stdout.encoding
, и строка напечатана правильно.
Но если я изменю локаль LC_CTYPE
с en_US.UTF-8
на C
, запускаю ее в терминале с LC_CTYPE=C ./test.py
, я получаю следующее:
ANSI_X3.4-1968
Traceback (most recent call last):
File "./test.py", line 7, in <module>
print u"富强"
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
sys.stdout.encoding
устанавливается в ASCII поэтому он не может обработать строку.