ファイルシステムでのUnicode正規化

異なるOSとファイルシステムがUnicode正規化をどのように処理するかを学びます。macOSのNFD問題とクロスプラットフォームファイル名互換性を理解します。

Use Cases

詳細な説明

ファイルシステムの正規化

異なるオペレーティングシステムはUnicodeファイル名を異なる方法で処理します。

macOS (APFS / HFS+)

  • HFS+: NFD正規化を強制(Appleの修正版NFD)
  • APFS: 元の形式を保持するが、比較時にNFDライクな正規化を実行

Windows (NTFS)

NTFSはファイル名をそのまま保存 — 正規化は適用されません。NFCとNFD形式の同じ名前が別のファイルとして共存できます。

Linux (ext4, XFS, Btrfs)

ほとんどのLinuxファイルシステムはNTFSと同様に、正規化なしでファイル名を生バイトとして保存します。

クロスプラットフォームの落とし穴

  1. macOSの開発者がrésumé.pdfを作成
  2. macOSはrésumé.pdf(NFD)として保存
  3. ファイルがGitにコミットされる
  4. Windowsの開発者がチェックアウト
  5. NFC形式で検索するスクリプトがファイルを見つけられない

Gitと正規化

Gitのcore.precomposeUnicode設定(macOSではデフォルト:true)がNFDファイル名をインデックスでNFCに変換し、クロスプラットフォームの問題を軽減します。

ユースケース

クロスプラットフォームアプリケーション、ファイル同期ツール(DropboxやRsyncなど)、バックアップシステム、macOS・Windows・Linux間で一貫したファイル名処理が必要なビルドツールを構築する開発者にとって重要です。

試してみる — Unicode Normalizer

フルツールを開く