检查可打印的Unicode

时间:2013-01-17 16:45:21

标签: python unicode

我知道要检查字符串是否可打印,我们可以执行以下操作:

def isprintable(s,codec='utf8'):
    try: 
        s.codec(codec)
    except UnicodeDecodeError: 
        return False
    else: 
        return True

但有没有办法用Unicode来做,而不是字符串? 顺便说一句,我正在使用推文,我将推文转换为Unicode如下

text=unicode(status.text)

2 个答案:

答案 0 :(得分:9)

我不确定使用代码点的解决方案在面对Unicode标准更改或不同编码时是否可靠。一个更抽象的解决方案:

import unicodedata

if unicodedata.category(char) == 'Cc':
        raise UnhandledKeypressError('unprintable char')

换句话说,如果字符串的所有字符(unicode对象)都没有具有值'control'的属性类别,则该字符串是可打印的。

为了比较,Qt的QChar.isPrint():

  

如果字符是可打印字符,则返回true;否则返回false。这是任何不属于Cc或Cn类别的角色。请注意,这并不表示该字符是否以特定字体可用。

答案 1 :(得分:1)

您正在寻找一系列代码点的测试,因此您需要一个正则表达式:

import re
# match characters from ¿ to the end of the JSON-encodable range
exclude = re.compile(ur'[\u00bf-\uffff]')

def isprintable(s):
    return not bool(exclude.search(s))

对于代码点超过False(“¾”)的任何unicode文本,这将返回\u00BE

>>> isprintable(u'Hello World!')
True
>>> isprintable(u'Jeg \u00f8ve mit Norsk.')
False