Форум сайта python.su
Всех с наступившим, желаю разнообразных благ и радостей -)
Никак не пойму где неверно загнуты мои руки. Есть код:
# coding: utf-8
print("\N{Latin capital letter a with grave}")
print("абвгдеёжзийклмнопрстуфхцчшщъыьэюя")
c:\dev>c:\python31\python test.py
À
абвгдеёжзийклмнопрстуфхцчшщъыьэюя
рстуфхцчшщъыьэюя
щъыьэюя
эюя
я
Traceback (most recent call last):
Fite "test.py", line 4, in <module>
print("абвгдеёжзийклмнопрстуфхцчшщъыьэюя")
стуфхцчшщъыьэюя")
ъыьэюя")
я")
)
IO Error: [Errno 13] Permission denied
Офлайн
А зачем вам понадобился этот патч? Я что-то не уловил его важность… 65001 очень сильно отличается от стандартного utf-8?
Теперь по сути дела:
- Не вижу причин для permission denied - и не могу воспроизвести локально. Вероятно, это ваша специфическая ошибка. Вызванная либо особенностями конкретно вашей винды - или криво наложенным патчем.
- вы пытаетесь запустить консоль в unicode режиме. Unicode != UTF-8.
- вероятно, требуется настроить sys.stdout так, чтобы он представлял собой объект с кодировкой вроде unicode-enscape (по умолчанию на винде при любых настройках консоли stdin/stdout настроены на locale.getpreferredencoding())
Офлайн
Для того чтобы консоль могла выводить данные в utf-8, надо сменить кодировку, по умолчанию там включается досовская 866. Кодировка меняется командой chcp. Команда chcp не знает что такое utf-8, и ей надо указать код, этим кодом является “65001” (http://msdn.microsoft.com/en-us/library/system.text.encoding%28VS.80%29.aspx).
Без патча, а его суть просто добавление алиаса (одна строка, криво его добавить очень затруднительно), питон не понимает, что это за странная кодировка 65001 и выдает ошибку.
Запуск консоли без /u дает то же самое сообщение.
Как вообще делают грамотные люди, если требуется видеть utf-8 в консоли? Судя по всему делать свое собственное окно, и тащить за собой Gtk или Qt?
Офлайн
нужен именно utf-8 или просто кириллица?
Если просто кириллица, то проще всего перекодировать юникод в cp866.
Если utf-8, то я не совсем понимаю, зачем он нужен виндовой консоли :)
Офлайн
Нужен именно utf-8. Было бы полезно знать как это делается. Просто раз есть консоль, есть возможность смены кодировки, есть шрифт, который содержит уйму символов, тот же самый знак евро, греческие буквы… почему бы и нет?
Офлайн
Тема явно не относится к Питону.
Может помогут ссылки:
http://stackoverflow.com/questions/5419/python-unicode-and-the-windows-console
http://wiki.python.org/moin/PrintFails
Офлайн
Кажется, cmd в 65001 - это не совсем utf-8. По крайней мере попытка вывести даже через raw io добавляет мусор в конец. Вывод в файл дает нормальный контент. Нет никаких свелых идей. Гадость этот cmd.exe
Офлайн
m.meehalkoff, вы поняли сами, что написали?
Офлайн
igor.kaistПардон.
def utf(promt):
return promt.decode('utf8','cp1251')
print utf("Какой то текст")
Отредактировано (Фев. 23, 2011 19:54:09)
Офлайн
Вот такой скрипт выводит надпись и без выкрутасов с функцией
#! /usr/bin/env python
# -*- coding: UTF-8 -*-
print u"Может так лучше?"
Офлайн