IPhone, special characters in JSON Response

Writing an iphone application, and I get my data from a REST API that returns JSON. My problem is that some data contains special characters and Im getting errors. Example:

MartÌn Petite-RiviΓ‹re-Saint-FranÁois 

Here is my current code:

 NSString *jsonString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; NSMutableArray *tempResults = [[[jsonString JSONValue] objectForKey:@"getRegionResortsLastUpdatedResponse"] objectForKey:@"return"]; 

Whenever there are special characters in the data, "jsonString" returns "(null)", otherwise everything works fine.

Is this something that I can handle at my end, or do I need to change the API to output character codes?

+4
source share
2 answers

If -initWithData:encoding: returns nil, your data is almost certainly not encoded in the requested encoding. I suspect that you are not sending UTF8 and rather sending some other encoding, such as one of the Windows or Latin1 code pages. See String Encoding in the NSString Documentation .

+3
source

Use the following functions to encode code. I did this and worked great for me.

 + (NSData*) resolveXmlSpecialEntities:(NSData*)xmlData { if (xmlData == nil) return nil; if ([xmlData length] == 0) return xmlData; NSMutableString* xmlString = [[NSMutableString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding]; [xmlString replaceOccurrencesOfString:@"&amp;quot;" withString:@"\"" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; [xmlString replaceOccurrencesOfString:@"&lt;" withString:@"##??##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; [xmlString replaceOccurrencesOfString:@"&gt;" withString:@"##?!##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; [xmlString replaceOccurrencesOfString:@"&lt;br&gt;" withString:@"##br##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; [xmlString replaceOccurrencesOfString:@"&lt;/br&gt;" withString:@"##/br##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; [xmlString replaceOccurrencesOfString:@"&lt;b&gt;" withString:@"##b##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; [xmlString replaceOccurrencesOfString:@"&lt;/b&gt;" withString:@"##/b##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; [xmlString replaceOccurrencesOfString:@"&lt;center&gt;" withString:@"##center##"options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; [xmlString replaceOccurrencesOfString:@"&lt;/center&gt;" withString:@"##/center##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; [xmlString replaceOccurrencesOfString:@"##??##![CDATA[" withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; [xmlString replaceOccurrencesOfString:@"]]##?!##" withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; [xmlString replaceOccurrencesOfString:@"&amp;" withString:@"##ampersand##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; [xmlString replaceOccurrencesOfString:@"##ampersand##nbsp;" withString:@" " options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; xmlData = [xmlString dataUsingEncoding:NSUTF8StringEncoding]; [xmlString release]; return xmlData; } + (NSString*) stringByRemovingResolversInXmlString:(NSString*)xmlString { NSMutableString* stringToChange = [NSMutableString stringWithString:xmlString]; [stringToChange replaceOccurrencesOfString:@"##??##" withString:@"<" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; [stringToChange replaceOccurrencesOfString:@"##?!##" withString:@">" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; [stringToChange replaceOccurrencesOfString:@"##br##" withString:@"<br>" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; [stringToChange replaceOccurrencesOfString:@"##/br##" withString:@"</br>" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; [stringToChange replaceOccurrencesOfString:@"##b##" withString:@"<b>" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; [stringToChange replaceOccurrencesOfString:@"##/b##" withString:@"</b>" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; [stringToChange replaceOccurrencesOfString:@"##center##" withString:@"<center>"options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; [stringToChange replaceOccurrencesOfString:@"##/center##" withString:@"</center>" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; [stringToChange replaceOccurrencesOfString:@"##ampersand##" withString:@"&" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; return [NSString stringWithString:stringToChange]; } 
+2
source

All Articles