Saturday, November 30, 2013

json data containing Chinese, parsing always a null value, seek expert education

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]; / / For binary data, use: NSData * responseData = [request responseData];
NSLog (@ "% @", responseString);

arrayData = [NSJSONSerialization JSONObjectWithData: [responseString dataUsingEncoding: NSUTF8StringEncoding] options: NSJSONReadingMutableLeaves error: nil];
NSLog (@ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!! ");
NSLog (@ "arrayData =% @", [arrayData description]);

}
/ / Request fails, get error
- (Void) requestFailed: (ASIHTTPRequest *) request
{
NSError * error = [request error];
NSLog (@ "% @", error userInfo.);
}
Then been output arrayData = {}, solving
Reply:
Note encoding. Client and Web client released to unity.
Reply:
In other postings have replied, tried not?


http://www.cnliuda.com/API/index1_hot.asp This is used for encoding
UTF-8
Although the normal browser can parse into Chinese, but you see through the browser source code found, in fact, and you get to the data is the same solution:
http://www.cnliuda.com/API/index1_hot.asp to GB2312 code output

Or:

1, NSString * responseString = [request responseString]; instead
NSData * responseData = [nsstring dataUsingEncoding: -2147482063];

2, in the back of an increase in the following statement
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding (kCFStringEncodingGB_18030_2000);
NSString * responseString = [[NSString alloc] initWithData: responseData encoding: enc];
Reply:
The first way you said did not try, second try, useless.
Reply:
In other ways:

Method One:
In
NSString * responseString = [request responseString];
Here plus
NSString * str2 = [responseString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

Then output str2

Method Two:

In
NSString * responseString = [request responseString];
Here plus
NSString * str2 = [responseString stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

Look at the value of str2.
Reply:
Do not use UTF-8 encoding, and use this to try:
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding (kCFStringEncodingGB_18030_2000);

No comments:

Post a Comment