纠结的gb2312解码问题,终于曲线解决

-(void)startRequest
{
    NSString *message = @"http://www.laiwangbiaoju.com";
    NSURL *url = [NSURL URLWithString:[message URLEncodedString]];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setDelegate:self];
    [SVProgressHUD showWithStatus:@"加载中..."];
    [request startAsynchronous];
}

-(int)indexByValue:(NSString *)str{
    //使用NSMutableString类,它可以实现追加
    NSMutableString *value = [[NSMutableString alloc] initWithFormat:@""];
    NSString *colum2 = @"";
    int j = 0;
    //遍历出下标值
    for(int i=1;i<[str length];i++){
        NSString *colum1 = [str substringFromIndex:i];
        [value appendString:colum2];
        colum2 = [colum1 substringToIndex:1];
        if([colum2 isEqualToString:@","]){
            j = [value intValue];
            break;  
        }  
    }
    return j;  
}

-(NSString *)str:(NSString *)str value1:(NSString *)value1 value2:(NSString *)value2{
    //i:左边匹配字符串在str中的下标
    int i;
    //j:右边匹配字符串在str1中的下标
    int j;
    //该类可以通过value1匹配字符串
    NSRange range1 = [str rangeOfString:value1];
    //判断range1是否匹配到字符串
    if(range1.length>0){
        //把其转换为NSString
        NSString *result1 = NSStringFromRange(range1);
        i = [self indexByValue:result1];
        //原因:加上匹配字符串的长度从而获得正确的下标
        i = i+[value1 length];
    }
    //通过下标,删除下标以前的字符
    NSString *str1 = [str substringFromIndex:i];
    NSRange range2 = [str1 rangeOfString:value2];
    if(range2.length>0){
        NSString *result2 = NSStringFromRange(range2);
        j = [self indexByValue:result2];
    }  
    NSString *str2 = [str1 substringToIndex:j];  
    return str2;  
}

-(void)requestFinished:(ASIHTTPRequest *)request
{
    NSString *data = [request responseString];
    //NSLog(@"--------------------------------------------------------");
    NSLog(@"--data---%@",data);
    NSString* str = [self str:data value1:@"<p class=\"title\">" value2:@"</p>"];
    NSLog(@"--------------------------------------------------------");
    NSLog(@"--str---%@",str);
    NSData *htmlDataUTF8 = [str dataUsingEncoding:NSUTF8StringEncoding];
    //NSLog(@"htmlDataUTF8,%@",htmlDataUTF8);
    NSLog(@"--------------------------------");
    TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:htmlDataUTF8];
    NSString *xpathQuery1 = [[NSString alloc] initWithFormat:@"//a"];
    NSArray *elements1  = [xpathParser searchWithXPathQuery:xpathQuery1];
    NSString *tmp;
    
    for (TFHppleElement * element in elements1) {
        tmp = [element text];
        NSLog(@"tmp %@",tmp);
        if(tmp != nil)
            [key addObject:tmp];
    }
    [SVProgressHUD showSuccessWithStatus:@"加载完成"];
}

-(void)requestFailed:(ASIHTTPRequest *)request
{
    NSError *error = [request error];
    NSLog(@"error %@",[error localizedDescription]);
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"注意" message:@"网络连接失败" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    [alertView show];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    key = [[NSMutableArray alloc] initWithCapacity:0];
    [self startRequest];
	// Do any additional setup after loading the view, typically from a nib.
}

直接贴代码:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值