2012-03-14 115 views
4

我正在开发具有最新SDK和XCode 4.2的iOs 4应用程序。NSUTF8StringEncoding返回nil NSString

我正在使用Web服务来检索一些数据,并收到该数据。但是,当我做到这一点

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

receivedData有944bytes但json_string为零。

从Web服务我得到这个字符串(复制&从浏览器窗口中粘贴):

{"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 double quotes.[Code 17, Structure 20] 
Error:Invalid characters found.[Code 18, Structure 20] 

正在发生的事情的任何线索?

+0

尝试删除的方括号('[]')和/或增加'texto'后面的空字符串('“texto”:“”,') – Novarg 2012-03-14 12:20:12

回答

8

确保您有有效的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 NSUInteger NSStringEncoding; 
+0

我测试了你的代码,得到:**编码22486157 ** – VansFannel 2012-03-14 13:18:17

+0

这就是为什么你得到零值。你可以在头文件中检查所有支持的编码类型。 – Vignesh 2012-03-14 13:22:44

+0

但是,我怎样才能得到它的真名?我需要知道它的名字。 – VansFannel 2012-03-14 13:24:56

1

我认为你的问题是不返回有效的UTF-8文本的Web服务。你应该检查服务器端的编码。