HFS+のテキストエンコーディング

HFS+はファイルやフォルダなどのアイテム名をどのテキストエンコーディングで扱っているのでしょうか?

Appleは最近までこの情報をドキュメントに記載して公開していたのですが、今はしていません(2016年10月現在)。それでも第三者によるアーカイブがかろうじて残っており、典拠として貴重なのでここに記録しておきます。
2009年時点のFile Systems and Unicode Support
追記:いつのまにかリンク切れしていました。キャプチャを貼っておいてよかった…。
Apple - File Systems and Unicode Support

見ての通りUTF-16ですね。インターネット上ではUTF-8-MACであるとの説明が散見されますが間違いです。

HFS+のUnicode正規化形式

Unicode正規化形式はUAX#15で4種類が正式に決められています。HFS+はそのうちのNFDをさらにAppleが改変した特殊な正規化形式を実装しています。アイテム名はHFS+に保存される時点で一律にこの正規化形式が適用されます。

この特殊な正規化形式に名称はありません。ここではApple Modified NFDと呼ぶことにします。ちなみに、これを便宜的にでもUTF-8-MACと呼んではいけません。そもそもUTF-8ではないですし、Unicode正規化形式はテキストエンコーディング形式ではないからです。

Appleの改変は、一部の文字だけ分解しないようにしたことです。ここでいう「分解」はUnicode正規化の専門用語で、1文字を複数文字(結合文字列)に置換するだけでなく、1文字を別の1文字に置換する意味も含みます。Apple Modified NFDが純正のNFDと異なるのは、1文字を別の1文字に置換しないことです。

Apple_Modified-01

Apple Modified NFDがどの文字を別の1文字に置換しないのか、その符号位置範囲は上記ドキュメントに記載されているものの、古いので今は不正確です。より正確な情報はAppleの他のドキュメントにかろうじて記載されています。
Precomposed versus Decomposed
Apple Modified

  • U+2000–U+2FFF
  • U+F900–U+FAFF(CJK互換漢字)
  • U+2F800–U+2FA1F(CJK互換漢字追加)

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です