2013-06-02 61 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幾乎是最流行的編碼方式。