2009-06-15 3 views
13

Как кодируются кодировки в Юникоде? Мне нужно протестировать точно так, как показано ниже, проверяя конкретные буквы в строке. Код ниже дроссели: предупреждение: сравнение между указателем и целоеСравнение символов символа Unicode

for (charIndex = 0; charIndex < [myString length]; charIndex++) 
{ 
    unichar testChar = [myString characterAtIndex:charIndex]; 

    if (testChar == "A") 
     // do something 
    if (testChar == "B") 
     // do something 
    if (testChar == "C") 
     // do something 
} 

ответ

18

Для символьных литералов, одинарные кавычки:

if (testChar == 'A') NSLog(@"It's an A"); 

Или представляют символ, используя номер кода точки:

if (testChar == 0x1e01) NSLog(@"It's an A with a ring below"); 

Компилятор видит двойные кавычки как строку, поэтому строит «А» как эквивалент const char * (который дает вам сообщение об ошибке об указателе).

+0

Спасибо! Это делает именно то, что мне нужно. – Alan

+0

Это не совсем так. Тестирование индивидуального 'unichar', чтобы увидеть, является ли это« A », может вызвать проблемы - например, если кто-то пишет« Ä », он может быть закодирован как« 0041 0308 », и в этом случае ваш код будет определять« A »из '0041', или он может быть закодирован как' 00C4', и в этом случае ваш код не обнаружит его. – alastair

0

Что вы действительно пытаетесь сделать? Выполнение прямых сравнений символов необычно. Обычно -compare: или -isEqual: используется для сравнения двух строк. Или NSScanner будет использоваться для анализа компонентов строки.

+0

Хорошая точка. Я бы не сказал, что сравнение символов необычно, но цикл каждого символа в строке кажется необычным. Больше информации «большой картины», безусловно, поможет. –