Xcode的XML解码器中的一个问题

时间:2011-08-24 22:37:57

标签: xml xcode parsing nsxmlparser decoder

我想解码一个xml文件。网址为http://bbs.byhh.net/morecommend.xml此文件使用gb2312编码。所以我只是将编码方法从gb2312转移到UTF-8。

    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。我不知道出了什么问题。

1 个答案:

答案 0 :(得分:0)

NSString.h对gb2312一无所知,或者包含0x80000632作为有效的NSStringEncoding。尝试使用Core Foundation等效创建CFStringRef并将其强制转换为NSString *:

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