2013-06-02 18 views
0

我解析的是从网站获取的字符串,但根据我的下载情况得到不同的结果。 这样它的工作原理:URL下载的不同NSString结果

NSString *tagiString = @"http://tagesanzeiger.ch"; 
NSURL *tagiURL = [NSURL URLWithString:tagiString]; 
NSError *error; 
NSString *text =[NSString stringWithContentsOfURL:tagiURL 
              encoding:NSASCIIStringEncoding 
               error:&error]; 

以下面的方式它不起作用。我先下载数据,它送入NSMutableData *articleData,然后转换成的NSString与initWithData:encoding:

- (void)downloadWebsite 
{ 
NSString *tagiString = @"http://tagesanzeiger.ch"; 
NSURL *websiteURL = [NSURL URLWithString:tagiString]; 
NSURLRequest *request = [NSURLRequest requestWithURL:websiteURL]; 
connection = [[NSURLConnection alloc] initWithRequest:request 
              delegate:self 
            startImmediately:YES]; 
} 

- (void)connection:(NSURLConnection *)conn didReceiveData:(NSData *)data 
{ 
    [articleData appendData:data]; 
} 

- (NSString *)data 
{  
NSString *text = [[NSString alloc] initWithData:articleData 
             encoding:NSSymbolStringEncoding];  
return text; 
} 

好像产生NSString *text内容是不一样的两个版本?我需要使用不同的字符串编码吗?我尝试了许多没有成功。

+0

这两个结果字符串有什么不同?为什么不使用NSASCIIStringEncoding作为第二种方法呢? –

+0

即使在第二种方法中使用NSASCIIStringEncoding,它也不起作用。我尝试了一切,但卡住了。 – Pete

+0

好像最后一种方法存在问题。 NSString * text = [[NSString alloc] initWithData:articleData encoding:NSSymbolStringEncoding]返回一个空的文本字符串。为什么是这样? – Pete

回答

2

实现委托方法connectionDidFinishLoading以确保连接加载已完成,您可以在其中调用数据方法。也尝试使用NSASCIIStringEncoding而不是 NSSymbolStringEncoding。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSString *text = [[NSString alloc] initWithData:self.articleData 
              encoding:NSASCIIStringEncoding]; 
    //do whatever you need to do with the text 
} 
+0

完美,谢谢! – Pete

0

是的,你需要使用不同的字符串编码。你可以试试NSUTF8StringEncoding。这在为我工作。而utf-8几乎是最流行的编码方式。