json数据中含汉语,解析老是一个空值,求高手教育
json数据中含中文,解析老是一个空值,求高手教育
NSURL * url = [NSURL URLWithString:@"http://www.cnliuda.com/API/index1_hot.asp"];
ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate : self ];
[request startAsynchronous ];
- ( void )requestFinished:( ASIHTTPRequest *)request
{
NSString *responseString = [request responseString ]; // 对于 2 进制数据,使用: NSData *responseData = [request responseData];
NSLog ( @"%@" ,responseString);
arrayData = [NSJSONSerialization JSONObjectWithData:[responseString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableLeaves error:nil];
NSLog(@"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
NSLog(@"arrayData = %@",[arrayData description]);
}
// 请求失败,获取 error
- ( void )requestFailed:( ASIHTTPRequest *)request
{
NSError *error = [request error ];
NSLog ( @"%@" ,error. userInfo );
}
然后一直输出 arrayData = {},求解
------解决方案--------------------
注意编码。客户端与Web端发布的要统一。
------解决方案--------------------
在其它贴子中已回复了,试过没?
http://www.cnliuda.com/API/index1_hot.asp这个采用的是UTF-8的编码
浏览器虽然可以正常解析成为中文,但你通过浏览器查看源码发现,实际上是和你获取到的数据是一样的,解决办法:
http://www.cnliuda.com/API/index1_hot.asp改为GB2312码输出
或者:
1、将NSString *responseString = [request responseString ]; 改为
NSData *responseData = [nsstring dataUsingEncoding:-2147482063];
2、在1的后面增加以下语句
NSStringEncoding enc=CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *responseString=[[NSString alloc]initWithData:responseData encoding:enc];
------解决方案--------------------
换种方法:
方法一:
在
NSString *responseString = [request responseString ];
下面加上
NSString *str2 = [responseString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
然后输出str2
方法二:
在
NSString *responseString = [request responseString ];
下面加上
NSString *str2 = [responseString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
再看看str2的值。
NSURL * url = [NSURL URLWithString:@"http://www.cnliuda.com/API/index1_hot.asp"];
ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate : self ];
[request startAsynchronous ];
- ( void )requestFinished:( ASIHTTPRequest *)request
{
NSString *responseString = [request responseString ]; // 对于 2 进制数据,使用: NSData *responseData = [request responseData];
NSLog ( @"%@" ,responseString);
arrayData = [NSJSONSerialization JSONObjectWithData:[responseString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableLeaves error:nil];
NSLog(@"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
NSLog(@"arrayData = %@",[arrayData description]);
}
// 请求失败,获取 error
- ( void )requestFailed:( ASIHTTPRequest *)request
{
NSError *error = [request error ];
NSLog ( @"%@" ,error. userInfo );
}
然后一直输出 arrayData = {},求解
------解决方案--------------------
注意编码。客户端与Web端发布的要统一。
------解决方案--------------------
在其它贴子中已回复了,试过没?
http://www.cnliuda.com/API/index1_hot.asp这个采用的是UTF-8的编码
浏览器虽然可以正常解析成为中文,但你通过浏览器查看源码发现,实际上是和你获取到的数据是一样的,解决办法:
http://www.cnliuda.com/API/index1_hot.asp改为GB2312码输出
或者:
1、将NSString *responseString = [request responseString ]; 改为
NSData *responseData = [nsstring dataUsingEncoding:-2147482063];
2、在1的后面增加以下语句
NSStringEncoding enc=CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *responseString=[[NSString alloc]initWithData:responseData encoding:enc];
------解决方案--------------------
换种方法:
方法一:
在
NSString *responseString = [request responseString ];
下面加上
NSString *str2 = [responseString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
然后输出str2
方法二:
在
NSString *responseString = [request responseString ];
下面加上
NSString *str2 = [responseString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
再看看str2的值。