这里有一个菜鸟问题。
我正在尝试自动搜索并替换字符串中字符的ASCII值。
所以,我有一个由UITextField
的内容构成的字符串NSString *searchText;
searchText = (mmText.text);
然后我做一个小循环并检查所有输入的字符的ASCII值。如果他们不在允许的范围内,我想搜索并用其他东西替换它们(?现在)
所以让我说我在循环中,我得到一个ASCII 45字符(这是一个减号):
int asciiCode = 45;
现在我想在字符串中找到ASCII 45字符并将其替换为问号
这就是我现在正在做的事情:
NSString *ascStr = [NSString stringWithFormat:@"%c", asciiCode];
NSRange matchSpace;
matchSpace = [searchText rangeOfString: ascStr];
if (matchSpace.location == NSNotFound)
{}
else
NSMutableString *searchandReplace = [NSMutableString stringWithString: searchText];
[searchandReplace replaceCharactersInRange: [searchandReplace rangeOfString: ascStr] withString: @"?"];
mmText.text = searchandReplace;
}
这适用于常规ASCII值(0-255),但它似乎不适用于来自外语的扩展ASCII值。例如,当使用韩语模式时,其中一个主要字符看起来像是双重交叉的W,但是当通过NSLog打印时,它看起来像一个版权符号。这可能是搜索和替换程序不起作用的原因。它的ASCII值为8361。
任何想法?谢谢!
答案 0 :(得分:2)
事实证明它就像改变一样简单:
NSString *ascStr = [NSString stringWithFormat:@"%c", asciiCode];
到
NSString *ascStr = [NSString stringWithFormat:@"%C", asciiCode];
%C 8位无符号字符(unsigned char),由NSLog()作为ASCII字符打印,如果不是ASCII字符,则以八进制格式\ ddd或Unicode十六进制格式\ udddd打印,其中d是数字
%C 16位Unicode字符(unichar),由NSLog()作为ASCII字符打印,如果不是ASCII字符,则以八进制格式\ ddd或Unicode十六进制格式\ udddd打印,其中d是数字