PythonでUnicode正規化を行う場合、unicodedata
という標準ライブラリが利用できます。このライブラリにはnormalize
という関数があり、これを使うと一発でUnicodeを正規化することができます。
Unicode正規化には、文字の構成要素をまとめて1つのコードで表すNFC
と、構成要素を別々にコード化するNFD
という正規化方式があります。その他にもNFKC
とNFKD
という正規化方式が存在しますが、ここでは主にNFC
とNFD
について説明します。
例えば、「が」という平仮名を例に取ると、NFC
ではまとめて1つのコードで表しますが、NFD
では「か」と「゛」に分解したコードで表します。
import unicodedata
def tohex(s):
return " ".join([f"{ord(ch):04x}" for ch in s])
tohex(unicodedata.normalize("NFC", "が")) # '304c'
tohex(unicodedata.normalize("NFD", "が")) # '304b 3099'
このように、NFC
とNFD
を使ってUnicode文字を正規化することで、文字の使用が統一され、トラブルが少なくなるメリットがあります。
以上がPythonでのUnicode正規化の基本的な使い方となります。詳細な情報や他の正規化方式については、公式ドキュメントや各種リファレンスをご覧ください。.