Пожалуйста, обратите внимание на следующий код:Странная строка C и проблема сравнения NSString
NSString *string = @"ä";
const char *str1 = [string cStringUsingEncoding:NSUTF8StringEncoding];
const char *str2 = "ä";
NSLog(@"C string comparison: %d",strcmp(str1,str2));
NSLog(@"str1: \"%s\"", str1);
NSLog(@"str2: \"%s\"", str2);
Если работать с совершенно новым проектом Фонда, эта программа выводит:
C string comparison: 0
str1: "ä"
str2: "ä"
Это действительно то, что я Ожидается, что произойдет, потому что строки должны быть одинаковыми.
Однако, если я бегу это точно такой же код где-то глубоко внутри другого кодовую, я получаю этот выход:
C string comparison: 31
str1: "ä"
str2: "ä"
Что может объяснить это различие? Я уверен, что оба файла находятся в кодировке UTF-8. Это - разные кодировки файлов - это единственное возможное объяснение этого поведения, верно?
Любые идеи, что могло бы пойти не так во втором случае? Как я могу это исправить?
(я должен упомянуть, пожалуй, что во втором случае код запущен в качестве .mm
файла, т.е. в Objective-C++. Может ли это быть объяснение для этого?)
Я бы попробовать войти какие строки фактически сравниваются во втором случае. – Marvo
И убедитесь, что вы помещаете кавычки вокруг строк при их регистрации, чтобы убедиться, что у вас нет некоторого заднего пробела. – Marvo
@Marvo Спасибо, я изменил свой вопрос соответственно. – meh