Mac OS Xのファイルシステムの文字コード
Mac OS Xのファイルシステムは、一般的な「UTF-8」ではなく、「UTF-8-MAC」という文字コードでファイル名を保存している。この「UTF-8-MAC」では、「パ」のように濁点・半濁点がついた文字が、「ハ」+「半濁点」という形で2文字(?)に分けて保存されている。「パ」1文字で保存するのをNFC、「ハ」+「半濁点」の2文字で保存するのをNFDと言うらしい。
ここで、プログラム側からファイル名を伝えるときは、「パ」と言っても(UTF-8 / NFC)、「ハ」+「半濁点」と言っても(UTF-8-MAC / NFD)、どちらでもOKのようだ。ファイルシステムが自動的に「パ」から「ハ」+「半濁点」へ変換してくれる。
ただし、ファイルシステムからファイル名を受け取る場合は、常に「ハ」+「半濁点」の形(UTF-8-MAC / NFD)になっている。この状態ではEUC-JPやSHIFT-JIS等の文字コードには変換できない。事前に普通の「UTF-8」に変換しておく必要がある。この普通の「UTF-8」への変換を行う際に、単にNFD→NFCへの変換だと考えて、
#!/usr/bin/perl
use Unicode::Normalize qw/NFC NFD/;
$char = NFC( $char );
とやってしまうのはマズイらしい。「UTF-8-MAC」は一般的なNFDとちょっと違っているために、上のコードでは余分な変換まで行われてしまうとのこと。というわけで正解は以下のコード:
#!/usr/bin/perl
use Text::Iconv;
$char = Text::Iconv->new( 'UTF-8-MAC', 'UTF-8' )->convert( $char );
「『UTF-8-MAC』を『UTF-8』に変換する」という処理をしなくてはならないらしい。
これが分かってしまえばどうと言うことはないのだけれど、明らかに誤っていたり、紛らわしかったりな情報がWebに溢れていたので、少し戸惑ってしまった。少なくともコンピュータ関係に限っては、Googleで検索すればすぐに問題が解決してしまうことが多かったので、つい油断していたようだ。コンピュータ関係についても、Webにはまだまだ怪しい情報が多いということを、念頭に置いておかないと…。
コメント