2011-06-15 83 views
4

我有一個應用程序可以同步用戶填充的遠程數據庫中的數據。似乎人們會從大量不同的操作系統和程序中複製和粘貼垃​​圾,這會導致不同的隱藏非ASCII值被導入到系統中。從NSString中刪除非ASCII字符在objective-c

比如我結束了這一點:

Artist:â â Ioco 

這個同步過程中最終得到送回到系統和我的JSON的轉換進一步加強的問題,並在不同的地方無效字符會導致我的應用程序崩潰。

如何搜索並清除任何這些無效字符?

+0

一言以蔽之:創建一個新的可變字符串,迭代所有字符,檢查它是否是ASCII字符,如果是,則將其附加到字符串。 – 2011-06-15 17:15:01

+17

2011年真的沒有理由不正確處理unicode(http://www.joelonsoftware.com/articles/Unicode.html)。請記住,真正的人們可以並且確實有姓名,如何塞,穆勒或約恩遜,甚至還有穆罕默德多夫或ძძძძor或陳。 – damian 2011-06-15 17:27:42

+4

這種「廢話」來自其他語言的英文信件。你應該嘗試找出正確的編碼來保存字母。 – vikingosegundo 2011-06-15 17:33:52

回答

19

雖然我堅信,支持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!" 
+1

不,因爲'stringByTrimmingCharactersInSet'只修剪字符串的末尾,因此不會刪除所有字符。 – 2012-08-15 09:04:13

+1

我同意Unicode是要走的路。但在某些情況下,這可能仍然有效。我必須生成QR碼,我認爲這些變音符號等並不是那裏的理想人物。 – Besi 2014-04-16 13:30:14

+0

謝謝,夥計!這太棒了。 – Felipe 2017-02-16 21:32:43