end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

Unicode::Normalizeによる文字正規化

http://d.hatena.ne.jp/end0tknr/20100613/1276427626

以前、書いたmysqlのcollateに関連するかもしれませんが、Unicode::Normalize というperl moduleを見かけました。

http://d.hatena.ne.jp/dayflower/20060605/1149478073

「①→1」や「㈱→(株)」ができるようですが、これら(\x{3231} 等)の正規化定義は、どこにあるんだろう?
perl本体の中かな? それともunicode.org? 実際に使う際に調べるつもりです。

#!/usr/local/bin/perl
use strict;
use utf8;
use Encode;
use Unicode::Normalize;

main();

sub main {
    my $chars =
	{
	 "\x{3231}" => '(株)',
	 "\x{2460}" => '1',
	 "\x{3042}" => 'あ',
	 "\x{ff8a}" => 'ハ',
	 "\x{00a9}" => 'copyright',
	 "\x{33a1}" => 'm',
	 "\x{2103}" => '℃',
	 "\x{2121}" => 'TEL'
	};

    for my $chr (sort keys %$chars) {
	my $desc = $chars->{$chr};
	my $nfkc = Unicode::Normalize::NFKC($chr);
	print Encode::encode('utf8', "${chr}\t${nfkc}\t${desc}\n");
    }
}

実行結果

$ ./foo.pl 
©       ©       copyright
℃      °C     ℃
℡      TEL     TEL
①      1       1
あ      あ      あ
㈱      (株)    (株)
㎡      m2      m
ハ       ハ      ハ
$