3

Apple 提供了在数据库中使用存储在数据库中的规范化版本的文本创建附加列的示例: DerivedProperty

有一个函数 normalizeString 包含代码:

NSMutableString *result = [NSMutableString stringWithString:unprocessedValue];

CFStringNormalize((CFMutableStringRef)result, kCFStringNormalizationFormD);
CFStringFold((CFMutableStringRef)result, kCFCompareCaseInsensitive | kCFCompareDiacriticInsensitive | kCFCompareWidthInsensitive, NULL); 

我已经测试过这种方法,并且有将文本转换为规范化版本的示例: ąĄćłŁÓŻźŃĘęĆ->aacłłozzneec

除字符外,所有变音符号均已正确更改:łŁ

还有其他选择可以进行适当的标准化吗?

4

1 回答 1

7

我不会说波兰语,所以我的回答可能非常错误,但根据http://www.unicode.org/Public/6.2.0/ucd/UnicodeData.txt字符“ł”和“Ł”不是“普通”字符与变音符号的组合。

Unicode 数据文件中“±”的条目是

0105;带有OGONEK的拉丁文小写字母A;Ll;0;L;0061 0328;;;;N;拉丁文小写字母A OGONEK;;0104;;0104

第六个字段“0061 0328”表示“±”可以分解为“a”和U+0328(COMBINING OGONEK)。

但是“ł”和“Ł”的条目是

0141;带笔划的拉丁文大写字母 L;Lu;0;L;;;;;N;拉丁文大写字母 L 斜线;;;0142;
0142;带笔划的拉丁文小写字母 L;Ll;0;L;;;;;N;拉丁文小写字母 L 斜线;;0141;;0141

其中第六个字段为空,因此这些字符没有分解。

因此我怀疑是否会有任何将“ł”标准化为“l”的函数,你必须使用

[result replaceOccurrencesOfString:@"ł" withString:@"l" options:0 range:NSMakeRange(0, [result length])];
于 2013-04-24T09:35:26.360 回答