NSUTF8StringEncoding returns nil NSString

I am developing an iOs 4 application with the latest versions of the SDK and Xcode 4.2.

I use a web service to retrieve some data, and I get this data. But when I do this

NSString *json_string = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; 

receivedData has 944 bytes, but json_string is zero.

From the web service, I get this line (copy and paste from the browser window):

 {"posts": [ { "ID": "324","fecha": "10/02/2012","titulo": "Preparada para la lluvia","texto": "Β‘Al mal tiempo buena cara! Eso pensé al vestirme el otro dΓƒa que hiz...","foto": "2012/02/image20.jpg" } ] } 

I tried to check the JSON here, http://jsonformatter.curiousconcept.com/ , but I realized that this is not true. Show me this formatted output:

 { "posts":[ { "ID":"324", "fecha":"10/02/2012", "titulo":"Preparada para la lluvia", "texto":, "foto":"2012/02/image20.jpg" } ] } 

And these errors:

 Error:Strings should be wrapped in double quotes.[Code 17, Structure 20] Error:Invalid characters found.[Code 18, Structure 20] 

Any clue on what's going on?

+4
source share
2 answers

make sure you have valid UTF8 data, you verify that with features like

  NSStringEncoding encoding; NSString *pageData = [NSString stringWithContentsOfURL:url usedEncoding:&encoding error:NULL]; NSLog(@"Encoding %d",encoding);(Note: NSUTF8StringEncoding = 4) 

Available encoding,

 */ enum { NSASCIIStringEncoding = 1, /* 0..127 only */ NSNEXTSTEPStringEncoding = 2, NSJapaneseEUCStringEncoding = 3, NSUTF8StringEncoding = 4, NSISOLatin1StringEncoding = 5, NSSymbolStringEncoding = 6, NSNonLossyASCIIStringEncoding = 7, NSShiftJISStringEncoding = 8, /* kCFStringEncodingDOSJapanese */ NSISOLatin2StringEncoding = 9, NSUnicodeStringEncoding = 10, NSWindowsCP1251StringEncoding = 11, /* Cyrillic; same as AdobeStandardCyrillic */ NSWindowsCP1252StringEncoding = 12, /* WinLatin1 */ NSWindowsCP1253StringEncoding = 13, /* Greek */ NSWindowsCP1254StringEncoding = 14, /* Turkish */ NSWindowsCP1250StringEncoding = 15, /* WinLatin2 */ NSISO2022JPStringEncoding = 21, /* ISO 2022 Japanese encoding for e-mail */ NSMacOSRomanStringEncoding = 30, NSUTF16StringEncoding = NSUnicodeStringEncoding, /* An alias for NSUnicodeStringEncoding */ NSUTF16BigEndianStringEncoding = 0x90000100, /* NSUTF16StringEncoding encoding with explicit endianness specified */ NSUTF16LittleEndianStringEncoding = 0x94000100, /* NSUTF16StringEncoding encoding with explicit endianness specified */ NSUTF32StringEncoding = 0x8c000100, NSUTF32BigEndianStringEncoding = 0x98000100, /* NSUTF32StringEncoding encoding with explicit endianness specified */ NSUTF32LittleEndianStringEncoding = 0x9c000100 /* NSUTF32StringEncoding encoding with explicit endianness specified */ }; typedef NSUInteger NSStringEncoding; 
+8
source

I think your problem is a web service that does not return valid UTF-8 text. You must check the server side encoding.

+1
source

Source: https://habr.com/ru/post/952277/


All Articles