個人的「質はともかく継続する」8日目です
Unicode正規化について調べてみた
日本語を扱うソフトウエアエンジニアにとって、避けては通れない関門、それが「文字コード」。
その文字コードにまつわる問題を調べて行くうちに辿りついたのが、Unicode正規化。
Unicode正規化とは何なのか、調べて見ました。
Unicode正規化とは
すごく簡単にまとめると「表記揺れを抑える」こと。
Unicodeの文字体系は柔軟で、
たとえば「ギ」という文字があった場合、Unicodeでは2つの方法で表現できます。
1つのコードで表す、正準等価性
U+30AE
「キ」と「゛」を組み合わせて表す、互換等価性
U+FF77
U+FF9E
どちらも同じ「ギ」ですが、コードポイントが異な
ります。
普段は困ることはないのですが、sjisに変換する時なんかに困ったことが起きます。
変換前後で値を比較するときに、変換前はU+30AEで表されていたのが、変換後にはU+FF77、U+FF9Eの組み合わせになると、
見た目は同じなのに判定では違う文字として判定されてしまいます。
こういった表記揺れを抑えるために、正規化を行うそうです。
4種類の正規化
正規化には4種類あるようです。
NFD
文字を正準等価性によって分解します。
NFC
文字を正準等価性によって分解し、再度合成します。結果として文字の並びが変換前と変わることもあります。
NFKD
文字を互換等価性によって分解します。
NFKC
文字を互換等価性によって分解し、正準等価性によって再度合成します。
今日はここまで...明日はそれぞれの正規化を掘り下げていこうと思います。