« LimeSurvey 1.82+ | メイン | クラスターの数 »

2009年6月 6日 (土)

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にはまだまだ怪しい情報が多いということを、念頭に置いておかないと…。

トラックバック

このページのトラックバックURL:
http://app.blog.eonet.jp/t/trackback/411818/20073855

Mac OS Xのファイルシステムの文字コードを参照しているブログ:

コメント

「UTF-8-MAC」は、Iconv だけの便宜的な名称です。文字コードの名称ではありません。
これは、エンコーディング変換とUnicode正規化の2つを同時に処理するために使うものです。

タイトルを正確に言うと『Mac OS Xのファイルシステムの正規化形式』になると思います。
Unicode正規化は文字コードではありません。別物です。

コメントを投稿