平台: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?是否可以将这些字符打印出来。
答案 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
语句)。