我允许用户将一些数据输入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
然后我打印出第一个字符值,它看起来像这样:'''而不是'Š'。为什么会这样?我想在我的代码中允许使用特殊字符。
任何建议也会受到欢迎。需要一些指导。感谢
答案 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]