在Python中绘制盒子图

7

平台: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?是否有可能打印出这些字符。

相关


这对我来说完全有效,你知道Windows终端支持Unicode吗? - cobbal
@cobbal - 老实说,我不确定。我上次使用它们是在旧的DOS时代。现在我正在进行实验,但很多东西已经改变了。 - Rook
5个回答

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编码字符打印到标准输出,或者将字符解码为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的限制,您不能使用其他可能需要的字符。


打印 ''.join(map(chr, range(0xb3, 0xda)))。在打印之前解码为Unicode的意义是什么(当你已经完成了 chcp 437)? - jfs
你是对的,解码并不是必要的。通常,我更喜欢在所有地方使用Unicode,并让输出函数处理所有编码。 - Jiri

2

这取决于您的终端支持的内容。如果它使用UTF-8,并且Python能够检测到它,那么它就可以正常工作。

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

他在询问关于原始的Windows控制台。 - Gringo Suave
@Gringo:你知道如果运行chcp 65001,它支持UTF-8……对吧 - Ignacio Vazquez-Abrams
LookupError: unknown encoding: cp65001 - Gringo Suave

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')

这对我在支持utf-8编码数据的Linux终端上有效。


0

0

我使用Windows字符映射工具,在CMD和PowerShell中都显示正常。字体:Arial。 Python代码: Exe: print('■■■■■■■□□□□□□□') print('●●●●●●○○○○○○○○') 还有更多!


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接