测试终端是否支持伪图

时间:2015-10-27 21:11:51

标签: python linux unicode

我正在编写一个Python程序,将一些数据列表到stdout,如果终端支持它,我想使用花哨的Unicode box-drawing characters

现在有三种方法可以做到:

  • 盲目输出Unicode并希望用户不会得到一大堆垃圾,或者

  • 始终使用ASCII或

  • 进行一些检查,并在必要时回退到ASCII。

我可以做哪些检查?我能想到的最好的方法是检查终端是否有UTF-8语言环境。但是,这既不是必要条件也不是充分条件,因为用户可能没有任何支持框图字符的字体;否则他可能会使用 支持画线字符的不同语言环境。

1 个答案:

答案 0 :(得分:4)

您可以在sys.stdout.encoding块中使用try/except对您的字符进行测试编码,以查看输出编码是否支持字符:

#!python3
#coding:utf8

import sys

try:
    '┌┬┐╔╦╗╒╤╕╓╥╖│║─═├┼┤╠╬╣╞╪╡╟╫╢└┴┘╚╩╝╘╧╛╙╨╜'.encode(sys.stdout.encoding)
    test = True
except UnicodeEncodeError:
    test = False

if not test:
    print('Unsupported characters in',sys.stdout.encoding)

输出:

C:\>chcp 437
C:\>test
C:\>chcp 1252
Active code page: 1252
C:\>test
Unsupported characters in cp1252