在Python中绘制盒子

平台:WinXP SP2,Python 2.5.4.3。 (活动状态分配)

有没有人成功地写出了Python 中的框图绘制字符 ? 当我尝试运行这个:

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

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

有关

  • Python的默认编码为stderr?

Solutions Collecting From Web of "在Python中绘制盒子"

你的问题不是在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编码的字符直接到标准输出或解码字符unicode和打印unicode,试试这个脚本:

 # -*- coding: utf-8 -*- for i in range(0xB3, 0xDA): print chr(i).decode('cp437'), # without decoding (see comment by JFSebastian) print ''.join(map(chr, range(0xb3, 0xda))) 

但是,您可以使用框图字符,但由于cp437的限制,您不能使用其他可能需要的字符。

这取决于您的终端支持什么。 如果它使用UTF-8,并且如果Python可以检测到它,那么它工作得很好。

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

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

你有没有尝试将它们转码为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编码数据的终端是适用的。

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

例如,请参阅我的答案 “默认编码python for stderr?” 在那里我已经展示了如何将Unicode打印到sys.stderr (用裸print语句将其替换为sys.stdout )。