Ada*_*ski 3 database sqlite string objective-c
Apple提供了在数据库中创建附加列的示例,其中包含存储在数据库中的标准化文本版本: DerivedProperty
有一个函数normalizeString,它包含代码:
NSMutableString *result = [NSMutableString stringWithString:unprocessedValue];
CFStringNormalize((CFMutableStringRef)result, kCFStringNormalizationFormD);
CFStringFold((CFMutableStringRef)result, kCFCompareCaseInsensitive | kCFCompareDiacriticInsensitive | kCFCompareWidthInsensitive, NULL);
Run Code Online (Sandbox Code Playgroud)
我已经测试了这个方法,并且有将文本转换为规范化版本的示例:
?????Ó??????- >aac??ozzneec
所有变音字符都被正确更改,但字符除外: ??
有没有其他选择来进行适当的规范化?
我不会说波兰语,所以我的答案可能非常错误,但根据http://www.unicode.org/Public/6.2.0/ucd/UnicodeData.txt,字符"ł"和"Ł"不是"普通"字符与变音符号的组合.
Unicode数据文件中的"±"条目是
0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
第六个字段"0061 0328"表示"±"可以分解为"a"和U + 0328(COMBINING OGONEK).
但是"ł"和"Ł"的条目是
0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142; 0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
第六个字段为空的位置,因此这些字符没有分解.
因此,我怀疑是否会有任何将"ł"标准化为"l"的函数,你必须使用它
[result replaceOccurrencesOfString:@"?" withString:@"l" options:0 range:NSMakeRange(0, [result length])];
Run Code Online (Sandbox Code Playgroud)