рисунок коробки в питоне - PullRequest
7 голосов
/ 20 марта 2009

Платформа: WinXP SP2, python 2.5.4.3. (ActiveState распределение)

Кому-нибудь удалось выписать символы рисования прямоугольников в python? Когда я пытаюсь запустить это:

print u'\u2500'
print u'\u2501'
print u'\u2502'
print u'\u2503'
print u'\u2504'

Все советы приветствуются. Что я делаю неправильно ? Python поддерживает полный Unicode? Можно ли вообще заставить этих персонажей печатать?

1010 * Относящиеся * Кодировка по умолчанию для python для stderr?

Ответы [ 4 ]

6 голосов
/ 20 марта 2009

Ваша проблема не в Python, а в cmd.exe. Он должен быть настроен на поддержку UTF-8. К сожалению, переключить консоль Windows (cmd.exe) на UTF-8 «Python-совместимый» способ не так просто.

Вы можете использовать команду (в cmd.exe) для переключения на UTF8:

chcp 65001

но Python (2.5) не распознает эту кодировку. В любом случае вы должны установить правильный шрифт, поддерживающий юникод!

Для рисования ящиков я рекомендую использовать старую кодовую страницу DOS 437, поэтому вам нужно настроить ее перед запуском скрипта Python:

chcp 437

Затем вы можете печатать символы в кодировке cp437 непосредственно в стандартный вывод или декодировать символы в кодировку Unicode и печатать кодировку Unicode, попробуйте этот скрипт:

# -*- coding: utf-8 -*- 
for i in range(0xB3, 0xDA):
    print chr(i).decode('cp437'),

# without decoding (see comment by J.F.Sebastian)
print ''.join(map(chr, range(0xb3, 0xda)))

Однако вы можете использовать символы рисования блоков, но не можете использовать другие символы, которые могут вам понадобиться из-за ограничения cp437.

2 голосов
/ 20 марта 2009

Это сильно зависит от того, что поддерживает ваш терминал. Если он использует UTF-8 и если Python может его обнаружить, то он работает просто отлично.

>>> print u'\u2500'
─
>>> print u'\u2501'
━
>>> print u'\u2502'
│
>>> print u'\u2503'
┃
>>> print u'\u2504'
┄
1 голос
/ 20 марта 2009

При их печати будет напечатана кодировка символов по умолчанию, которая, возможно, не подходит для вашего терминала.

Вы пытались сначала перекодировать их в utf-8?

print u'\u2500'.encode('utf-8')
print u'\u2501'.encode('utf-8')
print u'\u2502'.encode('utf-8')
print u'\u2503'.encode('utf-8')
print u'\u2504'.encode('utf-8')

Это работает для меня на linux в терминале, который поддерживает кодированные данные utf-8.

0 голосов
/ 20 марта 2009

Python поддерживает Unicode. Можно распечатать эти символы.

Например, см. мой ответ на "Кодировка по умолчанию для python для stderr?" , где я показал, как вывести Unicode на sys.stderr (заменить на sys.stdout за голые print заявления).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...