Я работаю в 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
, если я правильно понимаю документацию.
Извиняюсь, я дал вам программу без преамбулы. Перед заданием трех строк он начинается следующим образом:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
К сожалению, кодирование, указанное строкой "кодирование:", - это кодирование исходного кода, а не выход на консоль. Но спасибо за ваши мысли!