модуль слишком навязчив для меня. Это может повлиять на не связанный код. Чтобы перенаправить вывод в файл, я устанавливаю 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:", является кодированиемисходный код, а не из консоли вывода. Но спасибо за ваши мысли!