测试终端是否支持伪图形

Mih*_*hai 4 python linux unicode

我正在编写一个 Python 程序,它将一些数据制表到标准输出,如果终端支持,我想使用花哨的Unicode 框绘图字符

现在我可以通过三种方式做到这一点:

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

  • 始终使用 ASCII,或

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

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

Mar*_*nen 5

您可以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)
Run Code Online (Sandbox Code Playgroud)

输出:

C:\>chcp 437
C:\>test
C:\>chcp 1252
Active code page: 1252
C:\>test
Unsupported characters in cp1252
Run Code Online (Sandbox Code Playgroud)

  • @thatotherguy,不,这不会检查它是否具有 *UTF-8* 语言环境……它会检查它是否具有支持字符的语言环境。它满足“他可能使用*确实*支持线描字符的不同语言环境”。 (3认同)