2013-02-27 2 views
1

Я разрешаю пользователю вводить некоторые данные в TextField. Пользователь вводит Š1234D в TextField.Разрешение специальных символов в iOS

код у меня выглядит следующим образом:

NSString *string = textField.text; 
for (int nCtr = 0; nCtr < [string length]; nCtr++) { 
       const char chars = [string characterAtIndex:nCtr]; 
       int isAlpha = isalpha(chars); 
} 

строка вывод выглядит следующим образом: Š1234D Тогда я напечатал первое значение гольцов, это выглядит следующим образом: «'» вместо «S». Почему это так? Я хотел бы также указать специальные символы в моем коде.

Любые предложения также приветствуются. Нужно руководствоваться. Спасибо

ответ

3

Вы усекаете значение символа как [NSString chatacterAtIndex:] возвращает unichar (16-разрядный), а не char (8-разрядный). попробуйте:

unichar chars = [string characterAtIndex:nCtr]; 

UPDATE: Кроме того, обратите внимание, что вы не должны использовать isalpha() для проверки писем, как ограничивается латинскими наборами символов, и вам нужно что-то, что может справиться с не латинскими буквами. Используйте этот код вместо:

NSCharacterSet *letterSet = [NSCharacterSet letterCharacterSet]; 
NSString *string = textField.text; 
for (NSUIntger nCtr = 0; nCtr < [string length]; nCtr++) 
{ 
    const unichar c = [string characterAtIndex:nCtr]; 
    BOOL isAlpha = [letterSet characterIsMember:c]; 
    ... 
} 
+0

Я получаю это как результат: $ 0 = 352 [нет описания Objective-C] – lakesh

+2

Вау, только что сделал то же обновление, но ваш лучше отформатирован. – Sulthan

+0

@lakesh '352 == & Scaron;' так что выглядит правильно. – trojanfoe

3

characterAtIndex: возвращает unichar (2-байтовый символ Unicode), не char (1 байт ASCII символов). Отбросив его до char, вы получаете только один из двух байтов.

Необходимо включить предупреждения о компиляторе. Я считаю, что «Подозрительные неявные преобразования» должны сделать трюк.

Отдельное примечание, вы не можете использовать isAlpha(char) с unichar. Использовать [[NSCharacterSet letterCharacterSet] characterIsMember:chars]

Смежные вопросы