搜索并替换字符串中的扩展ASCII

时间:2011-07-14 20:04:04

标签: objective-c ios ios4

这里有一个菜鸟问题。

我正在尝试自动搜索并替换字符串中字符的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。

任何想法?谢谢!

1 个答案:

答案 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是数字