Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 1, 2010 09:24:57

trambalda
От:
Зарегистрирован: 2009-12-25
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Отображение utf-8 в консоли Windows

Всех с наступившим, желаю разнообразных благ и радостей -)

Никак не пойму где неверно загнуты мои руки. Есть код:

# coding: utf-8

print("\N{Latin capital letter a with grave}")
print("абвгдеёжзийклмнопрстуфхцчшщъыьэюя")
Файл сохранен в кодировке utf-8.
Подкрутил файл \Lib\encodings\aliases.py в Питоне, как указано тут: http://bugs.python.org/issue6058
Запускаю консоль cmd.exe /u, меняю в настройках окна шрифт на Lucida Console, переключаюсь на кодовую страницу utf-8: chcp 65001.
Запускаю скрипт, получаю на выходе нечто невразумительное:
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
Как это побороть - решительно непонятно. Может кто-нибудь сталкивался с подобным?
А может есть какая-нибудь прямая альтернатива консоли с выводом в юникоде? IDLE - с принципом в одном окне открой, в другом получи вывод, не хочется.



Офлайн

#2 Янв. 1, 2010 11:59:26

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Отображение utf-8 в консоли Windows

А зачем вам понадобился этот патч? Я что-то не уловил его важность… 65001 очень сильно отличается от стандартного utf-8?
Теперь по сути дела:
- Не вижу причин для permission denied - и не могу воспроизвести локально. Вероятно, это ваша специфическая ошибка. Вызванная либо особенностями конкретно вашей винды - или криво наложенным патчем.
- вы пытаетесь запустить консоль в unicode режиме. Unicode != UTF-8.
- вероятно, требуется настроить sys.stdout так, чтобы он представлял собой объект с кодировкой вроде unicode-enscape (по умолчанию на винде при любых настройках консоли stdin/stdout настроены на locale.getpreferredencoding())



Офлайн

#3 Янв. 1, 2010 12:20:32

trambalda
От:
Зарегистрирован: 2009-12-25
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Отображение utf-8 в консоли Windows

Для того чтобы консоль могла выводить данные в 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?



Офлайн

#4 Янв. 1, 2010 14:13:56

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Отображение utf-8 в консоли Windows

нужен именно utf-8 или просто кириллица?
Если просто кириллица, то проще всего перекодировать юникод в cp866.
Если utf-8, то я не совсем понимаю, зачем он нужен виндовой консоли :)



Офлайн

#5 Янв. 1, 2010 14:29:18

trambalda
От:
Зарегистрирован: 2009-12-25
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Отображение utf-8 в консоли Windows

Нужен именно utf-8. Было бы полезно знать как это делается. Просто раз есть консоль, есть возможность смены кодировки, есть шрифт, который содержит уйму символов, тот же самый знак евро, греческие буквы… почему бы и нет?



Офлайн

#6 Янв. 1, 2010 23:53:05

vaxXxa
От: Kyiv, Ukraine
Зарегистрирован: 2009-06-16
Сообщения: 278
Репутация: +  0  -
Профиль   Отправить e-mail  

Отображение utf-8 в консоли Windows

Тема явно не относится к Питону.

Может помогут ссылки:
http://stackoverflow.com/questions/5419/python-unicode-and-the-windows-console
http://wiki.python.org/moin/PrintFails



Офлайн

#7 Янв. 2, 2010 00:56:44

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Отображение utf-8 в консоли Windows

Кажется, cmd в 65001 - это не совсем utf-8. По крайней мере попытка вывести даже через raw io добавляет мусор в конец. Вывод в файл дает нормальный контент. Нет никаких свелых идей. Гадость этот cmd.exe



Офлайн

#8 Фев. 23, 2011 08:04:43

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Отображение utf-8 в консоли Windows

m.meehalkoff, вы поняли сами, что написали?



Офлайн

#9 Фев. 23, 2011 19:53:02

m.meehalkoff
От:
Зарегистрирован: 2011-01-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Отображение utf-8 в консоли Windows

igor.kaist
Пардон.

Вот как я решил вопрос с отображением кирилицы в виндовой консоли.

Пишем функцию, которая тупо перекодирует utf-8 в понятную для виндовой консоли cp1251
def utf(promt):
return promt.decode('utf8','cp1251')
Ну и потом где нужно вывести кирилицу в консоль делаем так:
print utf("Какой то текст")
Как то так в общем.



Отредактировано (Фев. 23, 2011 19:54:09)

Офлайн

#10 Фев. 23, 2011 20:25:10

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Отображение utf-8 в консоли Windows

Вот такой скрипт выводит надпись и без выкрутасов с функцией

#! /usr/bin/env python
# -*- coding: UTF-8 -*-

print u"Может так лучше?"



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version