8

次のスニペットを見てください。

>>> import unicodedata
>>> from unicodedata import normalize, name

>>> normalize('NFKD', u'\xb4')
u' \u0301'

>>> normalize('NFKD', u'a\xb4a')
u'a \u0301a'

>>> normalize('NFKC', u'a\xb4a')
u'a \u0301a'

>>> name(u'\xb4'), name(u'\u0301')
('ACUTE ACCENT', 'COMBINING ACUTE ACCENT')

翻訳u'\xb4'する動作u' \u0301'が正しいかどうかを理解しようとしています。なぜアキュートアクセントとスペースを組み合わせるのですか?なぜそれはu\xb4をまったく翻訳するのですか?

fileformatでは、ACUTE ACCENT以前はと呼ばれていたことがわかりますSPACING ACUTE。次の文字が入力されるのを待つのではなく、カーソルが移動する必要があるということだと思いました。

UPD:誰かが興味を持っている場合に備えて、NFKC正規化後に最初にスペースがあるUnicode文字のリストを次に示します:http://pastebin.com/Z99r5AK9

4

3 に答える 3

11

アクセント文字は、Unicode標準で指定されているように、スペースと組み合わせアクセント文字の組み合わせです。

>>> import unicodedata
>>> unicodedata.decomposition(u'\xb4')
'<compat> 0020 0301'

文字の履歴はややあいまいですが、Unicode標準では、発音区別符号として使用されることが多い\u00B4にもかかわらず、空白+アクセントとして扱うことを決定しました。この説明を参照してください。

おそらく\u02CA代替手段として使用できます。空白として扱われず、分解が指定されていません。代わりに手紙としての資格があるため、マイレージは異なる場合があります。

于 2012-12-19T14:51:05.950 に答える
4

Unicode照合アルゴリズムのドキュメントをご覧ください。特に、注意してください

互換性の正規化(NFKC)は、スタンドアロンのアクセントをスペースと組み合わせのアクセントの組み合わせに折り畳みます。

于 2012-12-19T14:56:00.943 に答える
3

NFKDでは、アクセント付き文字は「分割」された方法で格納されます。最初にアクセントを付ける文字、次に組み合わせたアクセント:u' \u0301'

NFKCでは、アクセント付き文字は「結合された」方法で格納されます。専用のUnicodeコードポイントがあります。u'\xb4'これは、の省略形ですu'\u00b4'

どちらもアクセントだけを表しており、スペース文字のアクセントとして見ることができます。

于 2012-12-19T14:58:41.013 に答える