gpt4 book ai didi

objective-c - 如何确定一个 NSString 在 NFD 中是否规范化?

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:15 25 4
gpt4 key购买 nike

我需要确定给定的 NSString 是否为 NFD 形式。我该怎么做?

上下文:

我从 Mac OS(以 NSString 的形式)获得的文件路径是规范分解形式 (NFD)。当文件系统是 HFSPlus 时尤其如此。 http://developer.apple.com/mac/library/technotes/tn/tn1150.html#CanonicalDecomposition

我需要一个预组合的字符串。现在,仅当我知道文件名已分解为 NFD 形式时,我才想运行 precomposedStringWithCanonicalMapping 函数。

我能想到的解决方案:

//works on the idea that NFD(NFD(x)) = NFD(x)
BOOL IsCanonicallyDecompsed(NSString *initialFilePath) {
//decompose the string to NFD form
NSString *nfdFormOfStr = [initialFilePath decomposedStringWithCanonicalMapping];
char *ndfFormUTF8 = [nfdFormOfStr UTF8String];
char *intialPathUTF8 = [initialFilePath UTF8String];
return (strcmp(ndfFormUTF8, intialPathUTF8) == 0);
}

我的解决方案可以吗?另外,我对文件系统输出(在 NFD 中)的理解是否正确?

最佳答案

如果您需要预组合字符串 (NFC),最简单和最安全的做法是始终运行 precomposedStringWithCanonicalMapping,无论该字符串是否为 NFD。例如,您可能会得到一个字符串,其中一些字符是预组合的,一些是分解的。

请注意,HFS+ 文件系统使用 NFD 的修改版本,其中一些代码点范围保持预先组合以与 Mac OS 9 兼容;我不知道decomposedStringWithCanonicalMapping 函数是否使用与HFS+ 相同的规则。

关于objective-c - 如何确定一个 NSString 在 NFD 中是否规范化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3656350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com