python中的制表符

2024-04-18 14:18:26 发布

您现在位置:Python中文网/ 问答频道 /正文

平台:WinXP SP2,python 2.5.4.3。(活动状态分布)

有人成功地用python写出了box drawing characters吗? 当我试着运行这个:

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

所有小费都很感激。我做错什么了?python支持完全unicode吗?有可能把这些字符打印出来吗。

相关


Tags: boxfor平台printcharacterswinxp地用drawing
3条回答

这取决于你的终端支持什么。如果它使用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中,而在cmd.exe中。它必须设置为支持UTF-8。不幸的是,将windows控制台(cmd.exe)切换到UTF-8“与Python兼容”的方式并不容易。

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

chcp 65001

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

对于box绘图,我建议使用旧的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的限制,不能使用可能需要的其他字符。

相关问题 更多 >