NSUTF8StringEncoding возвращает nil NSString

Я разрабатываю приложение iOs 4 с последними версиями SDK и XCode 4.2.

Я использую веб-службу для извлечения некоторых данных, и я получаю эти данные. Но, когда я это делаю,

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

receivedData имеет 944 байт, но json_string равен нулю.

Из веб-службы я получаю эту строку (копировать и вставлять из окна браузера):

{"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" } ] }

Я попытался проверить JSON здесь, http://jsonformatter.curiousconcept.com/, но я понял, что это неверно. Покажите мне этот отформатированный вывод:

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

И эти ошибки:

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

Любая подсказка о том, что происходит?

2 ответа

убедитесь, что у вас есть действительные данные UTF8, вы проверяете, что с помощью таких функций, как

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

Доступная кодировка,

*/
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 ********** NSStringEncoding;


Я думаю, что ваша проблема - это веб-сервис, который не возвращает действительный текст UTF-8. Вы должны проверить кодировку на стороне сервера.

licensed under cc by-sa 3.0 with attribution.