[1] [[Mac OS]] で使われている[[ファイルシステム]] [[HFS Plus]] では、
[[ファイル名]]の表記に [[NFD]] の変種を使っています。

[21] よく「Mac では [[NFD]] を使う」と不正確に説明されますが、
実際には [[Unicode]] の本来の [[NFD]] とは微妙に違っています。

* 仕様書

[REFS[
- [3] [CITE[HFS Plus Volume Format]] <http://developer.apple.com/technotes/tn/tn1150.html#CanonicalDecomposition>
-- 移転確認 [TIME[2020-10-16T07:51:36.900Z]]
-- [CITE[Technical Note TN1150: [[HFS Plus Volume Format]]]], [TIME[2020-10-16T07:51:22.000Z]] <https://developer.apple.com/library/archive/technotes/tn/tn1150.html#//apple_ref/doc/uid/DTS10002989>
- [4] [CITE[UNICODE DECOMPOSITION TABLE]] ([TIME[2011-04-05 22:23:40 +09:00]] 版) <http://developer.apple.com/library/mac/#technotes/tn/tn1150table.html>
-- [14] [CITE[UNICODE DECOMPOSITION TABLE]] ([TIME[2014-03-30 08:35:43 +09:00]] 版) <http://web.archive.org/web/20110625235104/http://developer.apple.com/library/mac/#technotes/tn/tn1150table.html>
]REFS]

* 処理モデル

- [5] [[分解]]の表 (>>4) にある[[符号位置]]については、記載の通り置き換えます。
- [7] [[ハングル]]は[[完成型]]ではなく、[[組合型]]に置き換えます。

[REFS[
- [23] [CITE@en[Character mapping "tn1150:lowercase"]] ([TIME[2016-05-09 15:08:37 +09:00]]) <https://chars.suikawiki.org/map/tn1150%3Alowercase>
- [22] [CITE@en[Character mapping "tn1150:decomposition"]] ([TIME[2016-05-09 15:08:01 +09:00]]) <https://chars.suikawiki.org/map/tn1150%3Adecomposition>
]REFS]

* Unicode の版

[24] 
[[Unicodeの版]]によって[[正規化]]の挙動は変わります。

[6] [[Mac OS]] の 8.1 から [[MacOS X]] の 10.2.x までは、 [[Unicode 2.1]] に基づいていました。
[[Mac OS X]] の 10.3 からは、 [[Unicode 3.2]] に基づいています。この両者の[[分解]]には一部差異があり、
>>4 の表にもその違いの記述があります。 [SRC[>>3]]

* NFKD との差異

[2] この[[分解]]はおおむね [[NFD]] で使う[[正準分解]]によっているようですが、
[CODE(char)[[[U+2000]]]] から [CODE(char)[[[U+2FFF]]]] にある[[句読点]]や[[記号]]の類は無変換となっています。
これは旧来の [[Mac OS]] の[[符号化方式]]との[[往復変換]]の都合と説明されています [SRC[>>3]]。

[25] 
>>1 句読点や[[CJK互換漢字]]に例外があります。また [CODE(char)[[[U+F900]]]]
から [CODE(char)[[[U+FAFF]]]] にある[[CJK互換漢字]]についても無変換となっています。

;; [26] 
[[CJK互換漢字]]が除外されているので、 [[NFC]] や [[NFD]]
のように一部の[[旧字体]]が[[新字体]]に[[文字化け]]することがありません。

* 呼称

[20] [[UTF-8]] と本[[正規化]]方式の組み合わせを [[UTF-8-MAC]] と呼ぶことがあります。

* 歴史

[10] [[Unicode Consortium]] で [[CJK互換漢字]]以外だけの [[NFC]]/[[NFD]] の変種が提案されたことがありましたが、
規格化されませんでした。

[REFS[
- [11] [CITE[Variant Normalization Forms]] ([TIME[2003-03-18 04:20:41 +09:00]] 版) <http://www.unicode.org/review/pr-7b.html>
- [12] [CITE@en-us[Resolved Public Review Issues]] ([TIME[2011-03-03 01:10:25 +09:00]] 版) <http://www.unicode.org/review/resolved-pri.html#pri7>
]REFS]

[13] [CITE[Unicode::Normalize::Mac - search.cpan.org]] ([TIME[2011-04-10 18:05:51 +09:00]] 版) <http://search.cpan.org/dist/Encode-UTF8Mac/lib/Unicode/Normalize/Mac.pm>

* 相互運用性

[8] 他の[[ファイル・システム]]の類では[[正規化]]を行わなかったり、
[[NFC]] を採用していたりするため、[[ファイル名]]レベルでの互換性が無く、
不便であると非難されることがあります。

[9] [[日本語]]の場合、[[仮名]]の[[濁点]]・[[半濁点]]が[[正準分解]]され、
他の [[OS]] で正しく表示・処理されないことがあります。
[SEE[ [[濁点問題]] ]]

[28] 
[[Mac]] における [[ZIP]] の実装は、
[[ZIP]] の[[ファイル名]]でも[[ファイルシステム]]上と同様の表現を使うようです。

[29] [CITE@ja[macOS 26 Tahoeの正規化形式(NFD/NFC)の不具合により、日本語を含む非ASCII/非ラテン文字環境でNASに接続されたTime Machineボリュームにバックアップが行えない不具合はmacOS 26.2でも修正されていないので注意を。 | AAPL Ch.]], [[applech2]], [TIME[2026-01-05T07:11:39.000Z]] <https://applech2.com/archives/20251216-time-machine-bug-still-unresolved-on-macos-26-2-tahoe.html>

-*-*-

[31] なお[[Unicode正規化]]全体の欠陥 ([[HFS+のNFD]] では一部緩和されているものの、
完全ではない) については、 [[Unicode正規化]]を参照。

* メモ

[15] [CITE@en[HFS Plus - Wikipedia, the free encyclopedia]]
( ([TIME[2014-03-30 01:52:54 +09:00]] 版))
<http://en.wikipedia.org/wiki/HFS_Plus>

[16] [CITE[Technical Note TN1150: HFS Plus Volume Format]]
( ([TIME[2014-03-30 08:40:41 +09:00]] 版))
<https://developer.apple.com/legacy/library/technotes/tn/tn1150.html>

[17] [CITE[UNICODE DECOMPOSITION TABLE]]
( ([TIME[2014-03-30 08:41:14 +09:00]] 版))
<https://developer.apple.com/legacy/library/technotes/tn/tn1150table.html>

[18] ( ([TIME[2003-03-15 07:25:36 +09:00]] 版))
<http://www.unicode.org/review/pr-7.txt>

[19] [CITE@en-us[Resolved Public Review Issues]]
( ([TIME[2011-09-14 08:13:08 +09:00]] 版))
<http://www.unicode.org/review/resolved-pri.html#pri7>

[27] [CITE@ja[HFS+のテキストエンコーディング – ものかの]], [TIME[2023-05-24T04:33:01.000Z]], [TIME[2023-05-24T11:35:58.257Z]] <https://tama-san.com/hfsplus/>


[30] 関連: [[KS X 1026]]
