2011-08-24 28 views
0

xmlファイルをデコードしたい。 URLはhttp://bbs.byhh.net/morecommend.xmlです。このファイルはgb2312でコード化されています。だから私はgb2312からUTF-8にコーディング方法を転送するだけです。XcodeのXMLデコーダの問題

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];   
NSString *urlStr = @"http://bbs.byhh.net/morecommend.xml"; 
[request setURL:[NSURL URLWithString:urlStr]]; 
[request setHTTPMethod:@"GET"]; 


NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

//NSLog(@"%@", returnData); 


NSString *results = [[NSString alloc] initWithBytes:[returnData bytes] length:[returnData length] encoding:0x80000632];//gb2312 0x80000632 where the string becomes null 

NSString *newresults = [results stringByReplacingOccurrencesOfString:@"gb2312" withString:@"UTF-8"]; 
NSData *newData = [newresults dataUsingEncoding:NSUTF8StringEncoding]; 
NSLog(@"results=%@",new); 



NSXMLParser *xmlParser = [[NSXMLParser alloc]initWithData:newData]; 
BOOL suc = [xmlParser parse]; 

if (suc == YES) { 
    NSLog(@"success"); 
} 

else{ 
    NSLog(@"fail"); 
} 

[results release]; 
[request release]; 

奇妙なことは、私が本当に返信データを受け取っているということです。私はそれをファイルに書き込もうとしています。このファイルは正しい形式の正しいxmlファイルです。しかし、私は文字列にデータを転送します。文字列はnullになります。私は何が間違っているのか分からない。

答えて

0

NSString.hはgb2312について何も知らないか、有効なNSStringEncodingとして0x80000632を含みます。 Core Foundationを使用してCFStringRefを作成し、NSString *にキャストしてみてください:

NSString *results = (NSString *)CFStringCreateWithBytes(NULL, [returnData bytes], 
     [returnData length], kCFStringEncodingGB_2312_80, true); 
+0

ありがとうございました。実際、NSString.hはgb2312コーディングを認識しています。 – forest