🦔
【Python】濁点・半濁点が結合文字であるか識別する
結合文字である濁点・半濁点はそれぞれ U+3099, U+309A であるが、それ以外にも U+309B, U+FF9E, U+309C, U+FF9F もある。うっかりコピペしたり、誤変換で間違って使う可能性があるので、テストコードにはコードポイント表記のほうがよいだろう。
正しい記号であるかの識別には unicodedata モジュールの name
や combining
が使える。
>>> unicodedata.name("\u3099")
'COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK'
>>> unicodedata.combining("\u3099")
8
>>> unicodedata.name("\u309A")
'COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK'
>>> unicodedata.combining("\u309A")
8
結合文字ではない濁点・半濁点に対して combining
は 0
の値を返す
>>> http://unicodedata.name("\u309B")
'KATAKANA-HIRAGANA VOICED SOUND MARK'
>>> unicodedata.combining("\u309B")
0
>>> http://unicodedata.name("\u309C")
'KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK'
>>> unicodedata.combining("\u309C")
0
Discussion