Python 2.7: вывод utf-8 в консоль Windows

Скажем,

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 "", line 1, in 
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 "", line 1, in 
IOError: [Errno 0] Error

Как видите, он успешно печатает, пока не достигнет новой строки, а затем выдает ошибку IOError.

Работает следующий обходной путь:

def safe_print(str):
    try:
        print str.encode('utf-8')
    except:
        pass
    print

>>> safe_print(s)
testالله أكبر爆発ололо

Но должен быть способ лучше. Есть предложения?

6
задан Nikolai 16 August 2011 в 12:31
поделиться