簡體   English   中英

從 objective-c 中的 NSString 中刪除非 ASCII 字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM