UTF-8-MAC

提供: MacWiki
移動: 案内検索

UTF-8-MAC とは[編集]

UTF-8-MAC とは、Mac OS X に付属する iconv にて利用できる文字エンコードの一つで、 Normalization Form D (NFD) で符号化した UTF-8 のことを指します。 一般に UTF-8 とだけいった場合には、Normalization Form C (NFC) でエンコードされたものを意味します。

Unicode 標準では、NFC は正規結合(Canonical Composition)、 NFD は正規分解(Canonical Decomposition)として規定されています。 たとえば、「が」の字を NFC で表現すると U+304C (HIRAGANA LETTER GA) ですが、 NFD では U+304B U+3099 (HIRAGANA LETTER KA + COMBINING KATAKANA-HIRAGANA VOICED SOUND) という シークエンスになります。

ファイルシステムと UTF-8-MAC[編集]

UTF-8-MAC は、Mac OS X のファイルシステムにおいて、ファイル名やディレクトリ名の文字コードとして利用されています。

HFS+ では、ファイルシステムのレイヤにおいて NFC/NFD の変換機構が用意されているらしく、 NFC でエンコードしたファイル名を使ってファイルシステムへのアクセスをおこなっても、 適宜 NFD に変換して取り扱ってくれるようです。 ただし、この種の変換は入力方向においてのみ有効であり、 ls -w の結果など、出力側では必ず NFD でエンコードされたファイル名が出力されます。 (NFC に変換されて渡されるなら、NFD が隠蔽されて綺麗な気もするのですが…。)

アイヌ語表音記号と UTF-8-MAC[編集]

JIS X 0213 において区点コード 1-05-94 として収録されているアイヌ語表音記号「ト゜」は、 Unicode においては独立した文字としては存在せず、 代わりに U+30C8 U+309A (KATAKANA LETTER TO + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK) というコードの組み合わせによって表現されます。分解を考慮せずに作られたアプリケーションでは上手く表示されないことがあるかも知れません。(Cocoa フレームワークを使って作られたアプリケーションなら、おそらく大丈夫?)

ちなみに、独立した一つの文字としての半濁点は U+309C (KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK) として別に定義されており、U+309A (COMBINING~) は先行するコードに従属する特殊な文字コードです。(両者は全く別物)

利用上の注意点[編集]

将来的には UTF-8 を扱うアプリケーションは全て分解をサポートすべきであると考えられますが、 現在のところ NFD で正規化された UTF-8 は OS X のファイルシステムでしか使われていない状況にあるため、 これをサポートするソフトウェアはまだ少ないようです。 たとえば、nkf のように歴史ある文字コード変換プログラムでさえ、UTF-8-MAC でエンコードされたテキストデータを正常に扱えません (最近の nkf では -ic/-oc に UTF8-MAC を指定することで、分解に対応しているようです)し、 iconv に関しても、Fink で導入できるようなオリジナルのバイナリでは扱えません。(MacPorts の iconv は Jan 28, 2007 に対応済み。)

ファイル名を扱うプログラムを作成する際には、NFD で正規化された UTF-8 が不必要に外部に漏れないよう、 NFC で正規化しなおしてから扱うようにすると良いかも知れません。 この種の変換を iconv でおこなうには以下のようにします。

/usr/bin/iconv -f UTF-8-MAC -t UTF-8

また、Perl モジュールでは p5-text-iconv というものが、 ファイル名のエノーディングを扱うツールには convmv というものがあります。 (ref

関連リンク[編集]

Wiki内の関連ページ[編集]