【发布时间】:2012-02-21 11:18:29
【问题描述】:
我正在编写一个助手,它对输入字符串执行许多转换,以便创建该字符串的搜索友好表示。
考虑以下场景:
- 对德语或法语文本进行全文搜索
- 数据存储中的条目包含
MüllerGroßmannÇingletònBjørkÆreogramme
- 搜索应该是模糊的,因为
-
ull、Üll等匹配Müller -
Gros,groß等匹配Großmann -
cin等匹配Çingletòn -
bjö、bjo等匹配Bjørk -
aereo等匹配Æreogramme
-
到目前为止,我在案例(1)、(3)和(4)中都取得了成功。
我想不通的是如何处理(2)和(5)。
到目前为止,我尝试了以下方法均无济于事:
CFStringNormalize() // with all documented normalization forms
CFStringTransform() // using the kCFStringTransformToLatin, kCFStringTransformStripCombiningMarks, kCFStringTransformStripDiacritics
CFStringFold() // using kCFCompareNonliteral, kCFCompareWidthInsensitive, kCFCompareLocalized in a number of combinations -- aside: how on earth do I normalize simply _composing_ already decomposed strings??? as soon as I pack that in, my formerly passing tests fail, as well...
我浏览了ICU User Guide for Transforms,但并没有在上面投入太多……原因很明显。
我知道我可以通过转换为大写然后再转换回小写来捕获大小写 (2),这将在此特定应用程序的范围内工作。不过,我有兴趣从更基础的层面解决这个问题,希望也能支持区分大小写的应用程序。
任何提示将不胜感激!
【问题讨论】:
标签: unicode transform core-foundation foundation