在iOS中允许使用特殊字符

时间:2013-02-27 11:10:40

标签: ios objective-c special-characters

我允许用户将一些数据输入TextField。用户将Š1234D输入TextField。

我的代码如下:

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

字符串输出如下所示:Š1234D 然后我打印出第一个字符值,它看起来像这样:'''而不是'Š'。为什么会这样?我想在我的代码中允许使用特殊字符。

任何建议也会受到欢迎。需要一些指导。感谢

2 个答案:

答案 0 :(得分:3)

您正在截断字符值,因为[NSString chatacterAtIndex:]返回unichar(16位)而不是char(8位)。尝试:

unichar chars = [string characterAtIndex:nCtr];

更新:另请注意,您不应该使用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];
    ...
}

答案 1 :(得分:3)

characterAtIndex:返回unichar(2字节Unicode字符),而不是char(1字节ASCII字符)。通过将其转换为char,您只能获得两个字节中的一个。

您应该打开编译器警告。我相信“可疑的隐性转换”应该可以解决问题。

另外,您不能将isAlpha(char)unichar一起使用。使用[[NSCharacterSet letterCharacterSet] characterIsMember:chars]