Жалобы XCode на "мультисимвольную символьную константу", когда я пытаюсь сделать следующее:
static unichar accent characters[] = { 'ā', 'á', 'ă', 'à' };
Как Вы делаете массив символов, если не все они - ASCII? Следующее работает просто великолепно
static unichar accent[] = { 'a', 'b', 'c' };
Самая близкая работа вокруг я нашел, должен преобразовать специальные символы в шестнадцатеричное число, т.е. это работает:
static unichar accent characters[] = { 0x0100, 0x0101, 0x0102 };
Это не так, чтобы объектив-С не понравится, это то, что C не. Константа «C»
является для CHAR
, которая имеет 1 байт, а не Unichar
, который имеет 2 байта. (См. Примечание ниже для более подробной детализации.)
Нет идеально поддержанного способа представлять константу Unichar
. Вы можете использовать
char* s="ü";
в исходном файле UTF-8, чтобы получить C-String Unicode C-String или
NSString* s=@"ü";
в кодированном исходном файле UTF-8, чтобы получить NSString
. (Это было невозможно до 10,5. Это нормально для iPhone.)
Sliping
сам концептуально кодирует нейтраль; Но если вы хотите, вы можете получить символ Unicode с помощью -CharacterAtindex:
.
Наконец-то два комментария:
Если вы просто хотите удалить акценты из строки, вы можете просто использовать такой метод, не написав таблицу самостоятельно:
- (NSString *) StringWithoutCentsFromString: (NSString *) с
{
Если (! S) вернуть Nil;
NsmutableString * Результат = [NSMutableStrying StringWithString: S];
Результат cfstringfold ((cfmutableStringref), KCFCOMPAREDICARITIONINGITION, NULL);
возвратный результат;
}
См. Документ CFStringfold .
локализуемые .Strings
и NSLOCalizedStringString
. См. здесь . Примечание:
Для тайных исторических причин «А»
- это INT
в C, см. Обсуждение здесь . В C ++ это Char
. Но это не изменить тот факт, что написание более одного байта внутри '...'
, определяется и не рекомендуется. Например, см. ISO C Standard 6.4.4.10 . Тем не менее, в классической Mac OS был общим написать четырехбуквенный код, заключенный в отдельные кавычки, вроде «Appl»
. Но это еще одна история ...
Другим осложнением является то, что акцентированные буквы не всегда представлены 1 байтом; Это зависит от кодировки. В UTF-8 это нет. В ISO-8859-1 это есть. И Unichar
должен быть в UTF-16. Вы сохранили свой исходный код в UTF-16? Я думаю, что по умолчанию XCode является UTF-8. GCC может сделать конверсию кодирования в зависимости от установки тоже ...