remove non ASCII characters from NSString in objective-c

10,250

While I strongly believe that supporting unicode is the right way to go, here's an example of how you can limit a string to only contain certain characters (in this case 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!"
Share:
10,250
Slee
Author by

Slee

Updated on July 03, 2022

Comments

  • Slee
    Slee almost 2 years

    I have an app that syncs data from a remote DB that users populate. Seems people copy and paste crap from a ton of different OS's and programs which can cause different hidden non ASCII values to be imported into the system.

    For example I end up with this:

    Artist:â â Ioco
    

    This ends up getting sent back into system during sync and my JSON conversion furthers the problem and invalid characters in various places cause my app to crash.

    How do I search for and clean out any of these invalid characters?

  • Morten Fast
    Morten Fast over 11 years
    No, because stringByTrimmingCharactersInSet only trims the ends of the string, and therefore won't remove all the characters.
  • Besi
    Besi about 10 years
    I agree that Unicode is the way to go. However in some cases this might still be valid. I have to generate QR Codes and I think that umlauts and the like are not ideal characters there.
  • Felipe
    Felipe about 7 years
    Thanks, mate! This was brilliant.