LoginSignup
0
0

個人的「質はともかく継続する」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

文字を互換等価性によって分解し、正準等価性によって再度合成します。


今日はここまで...明日はそれぞれの正規化を掘り下げていこうと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0