end0tknr's kipple - 新web写経開発

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

mac osxのファイル名のエンコーディングは、NFD でnormalizedされたutf8らしい

max osxユーザから頂いたファイルを見ると、ファイル名が「ハ , ゙ , ッ , チ」や「ハ , ゚ , ソ , コ, ン」のように濁音や半濁音が独立(離れた)状態になっている。

どうやら、NFD でnormalizedされたutf8らしいので、次のようなscriptを書いて、実行すると...

#!/usr/local/bin/perl
use strict;
use utf8;
use Encode qw/encode decode :fallbacks/;
use Unicode::Normalize 'normalize';
use Data::Dumper;

main();

sub main {

    for my $normalize ('D','C','KD','KC'){
	for my $org_char (qw/は ば ぱ ハ バ パ ハ バ パ/){
	    my $new_char = normalize($normalize , $org_char);

	    my $org_char_no = encode('ascii',$org_char,FB_XMLCREF);
	    my $new_char_no = encode('ascii',$new_char,FB_XMLCREF);

	    my $out_str = join (' ',
				$normalize,':',
				"$org_char ($org_char_no)",
				'->',
				"$new_char ($new_char_no)");
	    print encode('utf8',$out_str),"\n";
	}
    }
}

実行結果

[endo@colinux tmp]$ ./foo.pl 
D : は (は) -> は (は)
D : ば (ば) -> ば (ば)
D : ぱ (ぱ) -> ぱ (ぱ)
D : ハ (ハ) -> ハ (ハ)
D : バ (バ) -> バ (バ)
D : パ (パ) -> パ (パ)
D : ハ (ハ) -> ハ (ハ)
D : バ (バ) -> バ (バ)
D : パ (パ) -> パ (パ)
C : は (は) -> は (は)
C : ば (ば) -> ば (ば)
C : ぱ (ぱ) -> ぱ (ぱ)
C : ハ (ハ) -> ハ (ハ)
C : バ (バ) -> バ (バ)
C : パ (パ) -> パ (パ)
C : ハ (ハ) -> ハ (ハ)
C : バ (バ) -> バ (バ)
C : パ (パ) -> パ (パ)
KD : は (は) -> は (は)
KD : ば (ば) -> ば (ば)
KD : ぱ (ぱ) -> ぱ (ぱ)
KD : ハ (ハ) -> ハ (ハ)
KD : バ (バ) -> バ (バ)
KD : パ (パ) -> パ (パ)
KD : ハ (ハ) -> ハ (ハ)
KD : バ (バ) -> バ (バ)
KD : パ (パ) -> パ (パ)
KC : は (は) -> は (は)
KC : ば (ば) -> ば (ば)
KC : ぱ (ぱ) -> ぱ (ぱ)
KC : ハ (ハ) -> ハ (ハ)
KC : バ (バ) -> バ (バ)
KC : パ (パ) -> パ (パ)
KC : ハ (ハ) -> ハ (ハ)
KC : バ (バ) -> バ (バ)
KC : パ (パ) -> パ (パ)


Encode::UTF8Mac というmoduleもあるらしい
http://search.cpan.org/perldoc?Encode::UTF8Mac