我需要能够确定(或预测)unicode字符何时无法打印。例如,如果我在默认设置下打印此unicode字符,则打印正常:
>>> print(u'\ua62b')
ꘫ
但是如果我打印另一个unicode字符,它会打印成一个愚蠢的,奇怪的方块:
>>> print(u'\ua62c')
我真的需要能够在打印字符之前确定它是否会显示为丑陋的方格(或有时作为匿名空白)。是什么导致这种情况,我该如何预测?
答案 0 :(得分:4)
虽然不太容易判断运行脚本的终端(或终端使用的字体)是否能够正确呈现给定字符,但至少可以检查该字符是否实际具有表示形式
字符\ua62b
定义为VAI SYLLABLE NDOLE DO
,而字符\ua62c
没有定义,因此可以将其呈现为正方形或其他通用符号。
检查字符是否已定义的一种方法是使用unicodedata
module:
>>> import unicodedata
>>> unicodedata.name(u"\ua62b")
'VAI SYLLABLE NDOLE DO'
>>> unicodedata.name(u"\ua62c")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: no such name
如上所示,ValueError
字符会引发\ua62c
,因为它未定义。
另一种方法是检查角色的类别。如果是Cn
则不分配字符:
>>> import unicodedata
>>> unicodedata.category(u"\ua62b")
'Lo'
>>> unicodedata.category(u"\ua62c")
'Cn'