Pythonのunicodedata
標準ライブラリにはモジュールがあり、unicodedata.normalize()
関数を使用してUnicode表現を変換できます。
import unicodedata
s1 = 'Spicy Jalape\u00f1o'
s2 = 'Spicy Jalapen\u0303o'
t1 = unicodedata.normalize('NFC', s1)
t2 = unicodedata.normalize('NFC', s2)
print(t1 == t2)
print(ascii(t1))
t3 = unicodedata.normalize('NFD', s1)
t4 = unicodedata.normalize('NFD', s2)
print(t3 == t4)
print(ascii(t3))
Python 3.xで実行する:
$ python3 test.py
True
'Spicy Jalape\xf1o'
True
'Spicy Jalapen\u0303o'
Pythonはシェルワンライナーにはあまり適していませんが、外部スクリプトを作成したくない場合は実行できます。
$ python3 -c $'import unicodedata\nprint(unicodedata.normalize("NFC", "ääääää"))'
ääääää
Python 2.xの場合、エンコード行(# -*- coding: utf-8 -*-
)を追加し、文字列をu文字のUnicodeとしてマークする必要があります。
$ python -c $'# -*- coding: utf-8 -*-\nimport unicodedata\nprint(unicodedata.normalize("NFC", u"ääääää"))'
ääääää