我知道要检查字符串是否可打印,我们可以执行以下操作:
def isprintable(s,codec='utf8'):
try:
s.codec(codec)
except UnicodeDecodeError:
return False
else:
return True
但有没有办法用Unicode来做,而不是字符串? 顺便说一句,我正在使用推文,我将推文转换为Unicode如下
text=unicode(status.text)
答案 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