Выполнение & ldquo; unicode & rdquo; Скрипт Python от Gedit vs Terminal

Как видно из скриншота, один и тот же сценарий, запускаемый из терминала и Gedit, ведет себя по-разному - в терминальном сценарии выполняется успешно, а в Gedit возникает ошибка:

enter image description here

Но если я изменю python в диспетчере инструментов Gedit на PYTHONIOENCODING=utf-8 python, то скрипт будет нормально выполняться и из Gedit

. Почему, и какие настройки в Терминале позволяют коду Python "Unicode" выполняться без проблем?


Просто чтобы обновить, как я добавил награду: Это не только GEdit, но и в SciTE возникает ошибка, но не в Geany, поскольку Geany выполняет скрипты Python через терминал

4
задан 3 April 2012 в 18:11

1 ответ

Терминал позволяет «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 поэтому он не может обработать строку.

0
ответ дан 3 April 2012 в 18:11

Другие вопросы по тегам:

Похожие вопросы: