将文件名标准化为NFC或不标准化(Unicode)

时间:2015-08-08 16:07:35

标签: unicode utf-8 normalization unicode-normalization

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

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

  

[...](不是因为NFD或此版本的NFD出现问题,   但因为一个人永远不应该改变数据。文件名不能是   归一化的。)[...]

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

1 个答案:

答案 0 :(得分:3)

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

'标准' Linux文件系统没有规定文件名的编码(它们被视为原始字节),所以假设它们是UTF-8并对它们进行规范化是一个错误,可能会导致问题。

另一方面,Mac OS X(HFS +)上的默认文件系统强制所有文件名在NFD的变体中都是有效的UTF-16。如果你需要比较文件路径,你应该采用类似的格式 - 理想情况下使用系统提供的API,因为它的NFD格式与旧版本的Unicode相关联。