Unicodeの正規化

アルファベットのoを伸ばしたやつとか、計算機で処理するときはoに戻したい場合が多々ある。
で、そんなときにはUnicode::Normalizaモジュールを使って元に戻します。

use Unicode::Normalize;
my $nfd = NFD($str);

# 私はどうやっても分解された文字が??でついてきちゃったので
# 正規表現で取り除いた
$nfd    =~ s/[^a-zA-Z_0-9\s]//g;

ここで注意。
入力する文字コードはutf8にする。

例えば、データベースから読み込みする場合は

Encode::decode('utf8',$str);

のようにしておく。