macOS上のAPFSはUnicode Normalizationを行うのか?
iOS 10.3がリリースされましたが、APFSへの移行が含まれていて話題です。特に文字コード界隈ではHFS+で搭載されていた暗黙のUnicode Normalizationがなくなっている点が指摘されています1。
ではmacOSではどうなのでしょうか。SierraならばすでにAPFSを扱うことが出来るので試してみましょう。
% hdiutil create -fs APFS -size 1GB foo.sparseimage WARNING: You are using a pre-release version of the Apple File System called APFS which is meant for evaluation and development purposes only. Files stored on this volume may not be accessible in future releases of OS X. You should back up all of your data before using APFS and regularly back up data while using APFS, including before upgrading to future releases of OS X. Continue? [y/N] y created: /Users/naruse/foo.sparseimage % hdiutil mount /Users/naruse/foo.sparseimage /dev/disk2 GUID_partition_scheme /dev/disk2s1 Apple_APFS /dev/disk2s1s1 41504653-0000-11AA-AA11-0030654 /Volumes/untitled % touch ガ.test % cp ガ.test /Volumes/untitled % ls -1|grep .test|od -tx1 0000000 e3 82 ab e3 82 99 2e 74 65 73 74 0a 0000014 % ls -1 /Volumes/untitled|grep .test|od -tx1 0000000 e3 82 ac 2e 74 65 73 74 0a 0000011
カレントディレクトリ (HFS+) では e3 82 ab e3 82 99 と2コードポイントにNFD2されていましたが、APFSでは e3 82 ac と1コードポイントになっていますね。
というわけで、macOS上のAPFSもUnicode Normalizationを行わないという結論でした。AppleもやっとファイルシステムのレイヤーでNormalizationを行うのが愚かな行いだと気付いたようでなによりです。(Foundation APIが正規化を行い続けていることがわかったので、この発言は撤回します。)
-
http://mjtsai.com/blog/2017/03/24/apfss-bag-of-bytes-filenames/ など↩
-
正確にはNFDとは多少違うのだが↩