2011-06-15 50 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