1

文字列が印刷可能かどうかを確認するには、次のようにすることができます。

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

しかし、文字列ではなく Unicode でそれを行う方法はありますか? ところで、私はつぶやきを扱っており、次のようにつぶやきを Unicode に変換します。

text=unicode(status.text)
4

2 に答える 2

12

コードポイントを使用したソリューションが、Unicode 標準の変更やさまざまなエンコーディングに直面しても堅牢であるかどうかはわかりません。より抽象的な解決策:

import unicodedata

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

言い換えると、すべての文字 (Unicode オブジェクト) が値「control」を持つプロパティ カテゴリを持たない場合、文字列は印刷可能です。

比較のために、Qt の QChar.isPrint() :

文字が印刷可能な文字である場合は true を返します。それ以外の場合は false を返します。これは、カテゴリ Cc または Cn 以外の任意の文字です。これは、文字が特定のフォントで使用可能かどうかを示すものではないことに注意してください。

于 2014-03-25T10:42:24.770 に答える
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
于 2013-01-17T17:05:07.910 に答える