从objective-c中的NSString中删除非ASCII字符

Sle*_*lee 5 iphone objective-c ipad

我有一个应用程序,用于同步用户填充的远程数据库中的数据.似乎人们从大量不同的操作系统和程序中复制和粘贴垃​​圾,这可能导致不同的隐藏非ASCII值导入系统.

例如,我最终得到这个:

Artist:â â Ioco
Run Code Online (Sandbox Code Playgroud)

这最终会在同步期间被发送回系统,我的JSON转换会加剧问题,并且各个地方的无效字符会导致我的应用程序崩溃.

如何搜索并清除这些无效字符?

Mor*_*ast 21

虽然我坚信支持unicode是正确的方法,但这里有一个例子,说明如何限制字符串只包含某些字符(在本例中为ASCII):

NSString *test = @"Olé, señor!";

NSMutableString *asciiCharacters = [NSMutableString string];
for (NSInteger i = 32; i < 127; i++)  {
    [asciiCharacters appendFormat:@"%c", i];
}

NSCharacterSet *nonAsciiCharacterSet = [[NSCharacterSet characterSetWithCharactersInString:asciiCharacters] invertedSet];

test = [[test componentsSeparatedByCharactersInSet:nonAsciiCharacterSet] componentsJoinedByString:@""];

NSLog(@"%@", test); // Prints @"Ol, seor!"
Run Code Online (Sandbox Code Playgroud)

  • 不会,因为 `stringByTrimmingCharactersInSet` 仅修剪字符串的末尾,因此不会删除所有字符。 (2认同)