识别无法打印的unicode字符

时间:2015-07-14 01:14:06

标签: python unicode printing character-encoding

我需要能够确定(或预测)unicode字符何时无法打印。例如,如果我在默认设置下打印此unicode字符,则打印正常:

>>> print(u'\ua62b')
ꘫ

但是如果我打印另一个unicode字符,它会打印成一个愚蠢的,奇怪的方块:

>>> print(u'\ua62c')
꘬

我真的需要能够在打印字符之前确定它是否会显示为丑陋的方格(或有时作为匿名空白)。是什么导致这种情况,我该如何预测?

1 个答案:

答案 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'