Как я могу получить кириллицу в выводе, Python? - PullRequest
4 голосов
/ 08 ноября 2010

как мне получить кириллицу вместо u'...

код такой

def openfile(filename):
    with codecs.open(filename, encoding="utf-8") as F:
        raw = F.read()
do stuff...
print some_text

отпечатков

>>>[u'.', u',', u':', u'\u0432', u'<', u'>', u'(', u')', u'\u0437', u'\u0456']

Ответы [ 3 ]

5 голосов
/ 08 ноября 2010

Похоже, some_text - это список объектов Unicode. Когда вы печатаете такой список, он печатает reprs элементов внутри списка. Поэтому вместо этого попробуйте:

print(u''.join(some_text))

Метод join объединяет элементы some_text с пустым пространством u'' между элементами. Результатом является один объект Unicode.

3 голосов
/ 08 ноября 2010

Мне не ясно, откуда взято some_text (вы вырезали этот бит вашего кода), поэтому я понятия не имею, почему он печатается в виде списка символов, а не строки.

НоВы должны знать, что по умолчанию Python пытается кодировать строки как ASCII, когда вы печатаете их в терминал.Если вы хотите, чтобы они были закодированы в какой-либо другой системе кодирования, вы можете сделать это явно:

>>> text = u'\u0410\u0430\u0411\u0431'
>>> print text
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3:
  ordinal not in range(128)
>>> print text.encode('utf8')
АаБб
0 голосов
/ 08 ноября 2010

u'\uNNNN' является ASCII-безопасной версией строкового литерала u'з':

>>> print u'\u0437'
з

Однако это будет отображаться только для вас, если ваша консоль поддерживает символ, который вы пытаетесь напечатать.Попытка описанного выше на консоли при установке в Западной Европе Windows не удалась:

>>> print u'\u0437'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u0437' in position 0: character maps to <undefined>

Поскольку получить консоль Windows для вывода Unicode сложно, функция Python 2 repr всегда выбирает ASCII-безопасную буквальную версию.

Ваш оператор print выводит версию repr, а не печатает символы напрямую, потому что они находятся внутри списка символов вместо строки.Если бы вы сделали print для каждого из членов списка, вы бы получили символы, выведенные напрямую, а не представленные в виде u'...' строковых литералов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...