是否将文件名规范化为 NFC(Unicode)

Normalize filenames to NFC or not (Unicode)

我编写了一个更喜欢 NFC 的应用程序。当我从 OSX 得到一个文件名时,它被规范化为 NFD。据我所知,我不应该像这里提到的那样转换数据:

http://www.win.tue.nl/~aeb/linux/uc/nfc_vs_nfd.html

[...](Not because something is wrong with NFD, or this version of NFD, but because one should never change data. Filenames must not be normalized.)[...]

当我将文件名与用户输入(在 NFC 中)进行比较时,我必须实现一个相应的比较函数来处理 Unicode 等价性。但这可能比需要的要慢得多。如果我将文件名规范化为 NFC 不是更好吗?当只涉及内存比较时,速度会提高很多。

您 link 建议的准确性取决于相关文件系统。

'standard' Linux 文件系统没有规定文件名的编码(它们被视为原始字节),因此假设它们是 UTF-8 并且规范化它们是错误的,可能会导致问题。

另一方面,Mac OS X (HFS+) 上的默认文件系统强制所有文件名在 NFD 变体中为有效的 UTF-16。如果您需要比较文件路径,您应该以类似的格式进行——最好使用系统提供的 API,因为它的 NFD 形式与旧版本的 Unicode 相关联。