Примечание: Я заменяю свой первоначальный ответ тем, который действительно подходит для этой проблемы. Извините за первоначальное недоразумение.
Следующая строка удалит html-сущности в вашей строке.
NSString *A = @"Valore Books";
NSString *B = (NSString *)CFXMLCreateStringByUnescapingEntities(NULL, (CFStringRef)A, NULL);
Я не смог найти эквивалентную функцию более высокого уровня, но производительность должна быть превосходной. Если я правильно прочитал документы, вы можете передать CFDictionaryRef в качестве третьего аргумента, чтобы указать дополнительные преобразования, но, похоже, это хорошо справляется со стандартными.
Документы здесь .
Обратите внимание, что, вероятно, будет хорошей идеей обращаться с кодировкой там, где вы тянете эти строки в свою программу, а не при каждом сравнении.
Также найдена вторая часть этого, которую вы должны рассмотреть. & # 160 - это не просто пробел, это неразрывный пробел, который приведенный выше код преобразует в \ 312 вместо стандартного пробела. На самом деле это отдельные символы в кодировке, и при сравнении строк произойдет сбой.
Возможно, было бы проще заменить # 160 на # 32, используя
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement
и затем запустить его через эскейп.
Мне также пришло в голову, что CFXMLCreateStringByUnescapingEntities
не будет доступен на iphone. Вот ссылка на пример, который показывает, как сделать аналогичные преобразования на iphone.