Я работаю в 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:», является кодированием исходного кода , а не вывода консоли. Но спасибо за ваши мысли!