Я пишу помощник, который выполняет ряд преобразований во входной строке, чтобы создать удобное для поиска представление этой строки.
Подумайте о следующем сценарии:
Мюллер
Гросманн
Тинглетон
Бьёрк
Эреограмма
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 для преобразований , но не вкладывал в него слишком много денег… для чего я думаю есть очевидные причины.
Я знаю, что могу уловить регистр (2), преобразовав его в верхний регистр, а затем обратно в нижний, что будет работать в рамках этого конкретного приложения. Тем не менее, я заинтересован в решении этой проблемы на более фундаментальном уровне, надеюсь, что он также позволит использовать чувствительные к регистру приложения.
Будем признательны за любые подсказки!