Допустим,
s = u"test\u0627\u0644\u0644\u0647 \u0623\u0643\u0628\u0631\u7206\u767A\u043E\u043B\u043E\u043B\u043E"
Если я попытаюсь напечатать его напрямую,
>>> print s
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'cp932' codec can't encode character u'\u0627' in position 4: illegal multibyte sequence
Поэтому я изменяю консоль на UTF-8 из Python (иначе она не пойметмой ввод).
import win32console
win32console.SetConsoleOutputCP(65001)
win32console.SetConsoleCP(65001)
А затем выведите строку, закодированную как utf-8, потому что Python не знает, что chcp 65001 - это UTF-8 (известная ошибка ).
>>> print s.encode('utf-8')
testالله أكبر爆発ололоTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 0] Error
Как видите, он печатается успешно, пока не достигнет новой строки, затем выдает ошибку IOError.
Работает следующий обходной путь:
def safe_print(str):
try:
print str.encode('utf-8')
except:
pass
print
>>> safe_print(s)
testالله أكبر爆発ололо
Но естьдолжно быть лучше.Есть предложения?