Я пытаюсь сравнить равенство двух многострочных строк. Я получаю одну из строк из веб-службы, а другую получаю от iTunes через Scripting Bridge. Строки из веб-службы в конечном итоге переносятся в iTunes, поэтому, если я это сделаю, а затем повторю сравнение строк, в идеале они будут идентичными.NSString isEqualToString: кажется, ошибочно сообщают о нецелесообразности
Однако при сравнении строк, подобных этому, кажется, что isEqualToString: всегда возвращает неравновесность. Я тестирую это, проверяя равенство строки из iTunes, которая первоначально поступала из веб-службы, и строку непосредственно из веб-службы.
Запись обеих строк в консоль производит вывод из обеих строк, которые выглядят идентичными. Регистрирование длин строк приводит к одинаковой длине.
Я также попытался сравнить строки, используя некоторые другие методы. Например, я преобразовал их в ASCII-строки, чтобы убедиться, что это не было какой-то вопрос Unicode:
NSData *iTunesStringData = [[self iTunesString] dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:YES];
NSData *webServiceStringData = [[self webServiceString] dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:YES];
NSString *newiTunesString = [[[NSString alloc] initWithData:iTunesStringData encoding:NSASCIIStringEncoding] autorelease];
NSString *newWebServiceString = [[[NSString alloc] initWithData:webServiceStringData encoding:NSASCIIStringEncoding] autorelease];
BOOL result = [newiTunesString isEqualToString:newWebServiceString];
Такая же проблема, не равны. Я пробовал сравнивать только первый символ:
NSComparisonResult result = [newiTunesString compare:newWebServiceString
options:NSLiteralSearch
range:NSMakeRange(0,1)
locale:[NSLocale currentLocale]];
Не возвращает NSOderedSame. Я записал эти первые символы в Консоль, и они кажутся одинаковыми. Я также рассмотрел различия в возвратах каретки и попытался заменить @ "\ r" на @ "" в обеих строках перед сравнением, что не работает (и, кроме того, это не должно влиять на равенство только первого символа). Я не хочу удалять символы @ "\ n", потому что я хочу сохранить несколько строк.
Что происходит? Любые другие идеи?
Вы пытались захватить unichar буферы из каждой строки и повторять их параллельно, чтобы узнать, где они отличаются? –
Вы также можете попробовать использовать один из методов '-precomposedStringWithCanonicalMapping' или' -precomposedStringWithCompatibilityMapping' и посмотреть, если это имеет значение. –
Что делать, если вы пишете 'dataUsingEncoding каждой строки:' UTF-8 (или ASCII) в файл и различаете их, или шестнадцатеричный дамп их и разбрасываете шестнадцатеричные дампы? –