Дело не в том, что Objective-C не нравится, а в том, что C не нравится. Константа 'c'
предназначена для char
с 1 байтом, а не unichar
с 2 байтами. (см. примечание ниже для более подробной информации.)
Не существует полностью поддерживаемого способа представления константы unichar
. Вы можете использовать
char* s="ü";
в исходном файле в кодировке UTF-8 для получения C-строки Unicode или
NSString* s=@"ü";
в исходном файле в кодировке UTF-8 для получения NSString
. (Это было невозможно до 10.5. Это нормально для iPhone.)
NSString
сам по себе концептуально нейтрален; но если вы хотите, вы можете получить символ Unicode, используя -characterAtIndex:
.
Наконец два комментария:
Если вы просто хотите удалить ударения в строке, вы можете просто использовать метод, подобный этому, без написания таблицы самостоятельно:
-(NSString*)stringWithoutAccentsFromString:(NSString*)s
{
if (!s) return nil;
NSMutableString *result = [NSMutableString stringWithString:s];
CFStringFold((CFMutableStringRef)result, kCFCompareDiacriticInsensitive, NULL);
return result;
}
См. Документ CFStringFold .
- Если вам нужны символы Юникода для локализации / интернационализации, вам не следует встраивать строки в исходный код. Вместо этого вы должны использовать
Localizable.strings
и NSLocalizedString
. Смотрите здесь .
Примечание:
По загадочным историческим причинам 'a'
- это int
в C, см. Обсуждение здесь . В C ++ это char
. Но это не меняет того факта, что запись более одного байта внутри '...'
определяется реализацией и не рекомендуется. Например, см. ISO C Стандарт 6.4.4.10 . Однако в классической Mac OS было обычным делом писать четырехбуквенный код, заключенный в одинарные кавычки, например 'APPL'
. Но это другая история ...
Еще одним осложнением является то, что акцентированные буквы не всегда представлены 1 байтом; это зависит от кодировки. В UTF-8 это не так. В ISO-8859-1 это так. И unichar
должно быть в UTF-16. Вы сохранили свой исходный код в UTF-16? Я думаю, что по умолчанию XCode - UTF-8. GCC может также выполнить некоторое преобразование кодировки в зависимости от настроек ...