我正在編寫一個幫助程序,對輸入字符串執行大量轉換,以創建該字符串的搜索友好表示。摺疊/標準化連字(例如Æ到ae)使用(Core)基礎
認爲以下場景:在德語或法語文本
Müller
Großmann
Çingletòn
Bjø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,但並沒有太投入巨資......什麼,我認爲是很明顯的原因。
我知道我可以通過轉換爲大寫,然後回到小寫來捕捉case(2),這將在這個特定應用程序的領域內工作。然而,我有興趣從更基礎的層面解決這個問題,希望能夠允許區分大小寫的應用。
任何提示將不勝感激!
+1 **太棒了!**我已經得出結論,我永遠無法得到這個問題的答案。我不再處理這個問題,所以我需要一些時間來充分理解這個問題 - 我想我週末有一些閱讀的內容! – danyowdee 2013-03-19 13:03:03