我正在编写一个Python程序,将一些数据列表到stdout,如果终端支持它,我想使用花哨的Unicode box-drawing characters。
现在有三种方法可以做到:
盲目输出Unicode并希望用户不会得到一大堆垃圾,或者
始终使用ASCII或
进行一些检查,并在必要时回退到ASCII。
我可以做哪些检查?我能想到的最好的方法是检查终端是否有UTF-8语言环境。但是,这既不是必要条件也不是充分条件,因为用户可能没有任何支持框图字符的字体;否则他可能会使用 支持画线字符的不同语言环境。
答案 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