модуль слишком навязчив для меня. Это может повлиять на не связанный код. Чтобы перенаправить вывод в файл, я устанавливаю PYTHONIOENCODING и запускаю

отаю в WinXP 5.1.2600, пишу приложение на Python с китайским пиньинь, которое вовлекает меня в бесконечные проблемы Unicode. Переход на Python 3.0 решил многие из них. Но функция print () для вывода на консоль не поддерживает Unicode по какой-то странной причине. Вот маленькая программа.

print('sys.stdout encoding is "' + sys.stdout.encoding + '"')
str1 = 'lüelā'
print(str1)

Вывод (изменение угловых скобок в квадратные скобки для удобства чтения):

    sys.stdout encoding is "cp1252"
    Traceback (most recent call last):
      File "TestPrintEncoding.py", line 22, in [module]
        print(str1)
      File "C:\Python30\lib\io.py", line 1491, in write
        b = encoder.encode(s)
      File "C:\Python30\lib\encodings\cp1252.py", line 19, in encode
        return codecs.charmap_encode(input,self.errors,encoding_table)[0]
    UnicodeEncodeError: 'charmap' codec can't encode character '\u0101' 
    in position 4: character maps to [undefined]

Обратите внимание, что ü = \ xfc = 252 не доставляет проблем, поскольку это верхний ASCII. Но а = \ u0101 выходит за пределы 8 бит.

У кого-нибудь есть идея, как изменить кодировку sys.stdout на utf-8? Имейте в виду, что Python 3.0 больше не используетcodecs Модуль, если я правильно понимаю документацию.

Извиняюсь, я дал вам программу без преамбулы. Перед тем, как 3 строки даны, это начинается так:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys

К сожалению, кодирование, указанное строкой "coding:", является кодированиемисходный код, а не из консоли вывода. Но спасибо за ваши мысли!

Ответы на вопрос(5)

Ваш ответ на вопрос