python curses.ascii 依赖于地区设置吗?

0 投票
2 回答
814 浏览
提问于 2025-04-11 19:24

curses.ascii模块里有一些很不错的功能,比如可以用来判断某个字符是否可以打印(curses.ascii.isprint(ch))。

不过,不同的字符编码在不同的地区设置下可能会有不同的可打印性。例如,有一些波兰字符:

>>> ord('a')
97
>>> ord('ą')
177
>>> 

我在想,是否有比curses.ascii模块里用的方法更好的方式来判断一个数字是否代表可打印字符:

def isprint(c): return _ctoi(c) >= 32 and _ctoi(c) <= 126

因为这个方法对某些地区设置不太友好。

2 个回答

2

这个东西叫做curses.ascii,所以用ASCII规则来判断哪些字符可以打印出来,这并不奇怪。如果你在使用ISO 8位编码,或者在一个已知的代码页上工作,你就需要一些规则来对应实际的代码和它们的显示效果。

我觉得使用Unicode字符和标准的Unicode分类是没问题的。不过,这可能不一定能正确显示curses和控制台的内容。

还需要考虑一下,对于这个应用来说,哪些内容是可以接受的,哪些是不可以接受的,即使它们是可以显示的。

4

如果你把字符转换成unicode格式,那么你就可以使用unicodedata这个工具:

>>> unicodedata.category(u'ą')[0] in 'LNPS'
True

撰写回答