python中的框绘图

时间:2009-03-20 04:31:03

标签: python windows unicode

平台:WinXP SP2,python 2.5.4.3。 (activestate distribution)

有没有人成功在python中写出box drawing characters? 当我尝试运行时:

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

所有提示赞赏。我究竟做错了什么 ? python是否支持完整的unicode?是否可以将这些字符打印出来。

相关

4 个答案:

答案 0 :(得分:6)

您的问题不在Python中,而在cmd.exe中。它必须设置为支持UTF-8。不幸的是,将Windows控制台(cmd.exe)切换为UTF-8“Python兼容”方式并不是一件容易的事。

您可以使用命令(在cmd.exe中)切换到UTF8:

chcp 65001

但Python(2.5)无法识别该编码。无论如何,你必须设置支持unicode的正确字体!

对于盒子绘图,我建议使用旧的dos代码页437,所以你需要在运行python脚本之前进行设置:

chcp 437

然后你可以将cp437编码的字符直接打印到stdout或解码字符到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的限制,您无法使用其他字符。

答案 1 :(得分:2)

根据终端支持的内容,这会有很大差异。如果它使用UTF-8,并且Python可以检测到它,那么它可以正常工作。

>>> print u'\u2500'
─
>>> print u'\u2501'
━
>>> print u'\u2502'
│
>>> print u'\u2503'
┃
>>> print u'\u2504'
┄

答案 2 :(得分:1)

打印它们将以默认字符编码打印,这可能不是您终端的正确编码。

您是否尝试过将它们转码为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编码数据的终端。

答案 3 :(得分:0)

Python支持Unicode。可以打印这些字符。

例如,请参阅my answer"Default encoding for python for stderr?",其中我已展示如何将Unicode打印到sys.stderr(将sys.stdout替换为裸print语句)。