Я хотел бы настроить консоль в Windows XP для поддержки UTF8
Не думаю, что это произойдет.
Кодовая страница 65001 содержит ошибки;некоторые вызовы stdio ведут себя некорректно и ломают многие инструменты.Несмотря на то, что вы можете зарегистрировать cp65001 в качестве кодировки вручную:
def cp65001(name):
if name.lower()=='cp65001':
return codecs.lookup('utf-8')
codecs.register(cp65001)
, и это позволяет вам print u'some unicode string'
, это не позволяет вам записывать не-ASCII символы в этой строке Unicode.Вы получаете те же странные ошибки (IOError 0 и др.), Что и вы, когда пытаетесь записывать последовательности не-ASCII UTF-8 непосредственно в виде байтовых строк.
К сожалению, UTF-8 является гражданином второго класса под Windows,Модель Unicode в NT была разработана до появления UTF-8, и, следовательно, ожидается, что вы будете использовать кодирование по два байта на единицу кода (UTF-16, первоначально UCS-2) везде, где вам нужен согласованный Unicode.Использование байтовых строк, таких как многие переносимые приложения и языки (например, Python), написанные с помощью stdio
, не подходит для этой модели.
И переписывание Python для использования консольных вызовов Windows Unicode (например, WriteConsoleW)из портативных C stdio не очень хорошо работают с такими хитростями оболочки, как конвейерная передача и перенаправление в файл.(Не говоря уже о том, что вам все еще нужно изменить шрифт терминала по умолчанию на TTF, прежде чем вы сможете увидеть результаты, работающие вообще ...)
В конечном счете, если вам нужна командная строка с работающим UTF-8поддержка приложений, основанных на stdio, вам, вероятно, лучше использовать альтернативу консоли Windows, которая намеренно ее поддерживает, такую как Cygwin, Python IDLE или pywin32 PythonWin.