Нечетные результаты из isequalToString NSString - PullRequest
3 голосов
/ 26 июля 2011

Я постоянно сталкиваюсь с (редкими) случаями, когда строки NSS не возвращаются равными, хотя они выглядят точно так же, когда они печатаются в консоли. Например:

[string1 isEqualToString:string2]
> comparing 'angelo debarre' to 'angelo debarre'

продолжает возвращаться НЕТ. Я пытался использовать NSString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet], но все равно не повезло. Я также пытался использовать компараторы, такие как compare: и localizedCaseInsensitiveCompare:, но продолжаю получать те же результаты. Есть идеи о том, что я могу упустить из виду?

Ответы [ 2 ]

7 голосов
/ 26 июля 2011

Попробуйте разложить строки, используя одну из NSString функций нормализации Unicode, например - (NSString *)decomposedStringWithCompatibilityMapping.Сопоставление совместимости (против канонического сопоставления) должно быть тем, что вы хотите, так как оно разлагает визуально схожие последовательности символов на одни и те же базовые компоненты.Однако я не проверял, является ли неразрывный пробел нормализованным в пробел.

РЕДАКТИРОВАТЬ: существует два типа нормализации сопоставления: разложенный и составной.Составленная версия - (NSString *)precomposedStringWithCompatibilityMapping.Не уверен, какой из них работает лучше в целом, но Стандартное приложение Unicode # 15 (Формы нормализации Unicode) говорит следующее из форм KC / KD:

Форма нормализации KC дополнительно складываетсяразличия между символами, совместимыми с совместимостью, которые неадекватно различаются во многих обстоятельствах.Например, символы катаканы половинной и полной ширины будут нормализованы к тем же строкам, что и римские цифры и их буквенные эквиваленты.

Нормализованные формы KC и KD нельзя применять к произвольному тексту вслепую.Поскольку они стирают много различий форматирования, они будут предотвращать двустороннее преобразование во многие устаревшие наборы символов и, если они не заменены разметкой форматирования, они могут удалять различия, важные для семантики текста.Лучше всего рассматривать эти формы нормализации как сопоставления в верхнем или нижнем регистре: они полезны в определенных контекстах для определения основных значений, но также и для внесения изменений в текст, которые не всегда могут быть подходящими.Они могут применяться более свободно к доменам с ограниченными наборами символов.

0 голосов
/ 26 июля 2011

Могу поспорить, что один пробел, а другой неразрывный пробел.Обрезка удаляет только чатактеры с префиксом и суффиксом.Это не влияет на внутреннее пространство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...