[英]remove non ASCII characters from NSString in objective-c
我有一個應用程序可以從用戶填充的遠程數據庫同步數據。 似乎人們從大量不同的操作系統和程序中復制和粘貼廢話,這可能導致將不同的隱藏非 ASCII 值導入系統。
例如,我最終得到了這個:
Artist:â â Ioco
這最終在同步期間被發送回系統,我的 JSON 轉換進一步加劇了問題,並且各個地方的無效字符導致我的應用程序崩潰。
如何搜索並清除這些無效字符?
雖然我堅信支持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!"
Morten Fast 答案的簡單版本:
NSString *test = @"Olé, señor!";
NSCharacterSet *nonAsciiCharacterSet = [[NSCharacterSet
characterSetWithRange:NSMakeRange(32, 127 - 32)] invertedSet];
test = [[test componentsSeparatedByCharactersInSet:nonAsciiCharacterSet]
componentsJoinedByString:@""];
NSLog(@"%@", test); // Prints @"Ol, seor!"
值得注意的是,這使用NSCharacterSet
的+characterSetWithRange:
方法來簡單地指定所需的 ASCII 范圍,而不必創建字符串等。
結果是相同的,因為使用isEqual:
將一個與另一個進行比較返回YES
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.