2012-03-22 55 views
1

我正在檢索包含UTF8或ASCII編碼文本的HTML。對於最常見的用途是ASCII解碼的作品中顯示的文本右:檢查NSData是否包含ASCII或UTF8編碼

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding]; 

現在我有UTF8編碼另一個HTML頁面,所以我必須使用:

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

什麼樣的編碼加載網站時我檢索是隨機的。我的問題是,有沒有辦法檢查NSData是否有權使用哪種解碼方式?所以我知道我需要使用哪種編碼類型。

Thnx!

回答

4

我不知道是否有可能檢查的NSData的編碼,所以這是我做過什麼:

NSString *dataStr; 
dataStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
if (!dataStr) 
{ 
    NSLog(@"ASCII not working, will try utf-8!"); 
    dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
} 
//Do stuff with dataStr 
+0

日Thnx,這是真的,你永遠不要在返回一個字符串,如果它不是ASCII編碼? – MiiChiel 2012-03-22 18:37:03

3

雖然Heliem答案是有用的,它是不是如果ASCII和UTF8既提供一個解決方案一個字符串作爲回報。例如:UTF8給我一些額外的字符(負面結果)和ASCII顯示正確的字符(正面結果)。我現在使用下面的代碼:

NSString *responseString, *responseStringASCII, *responseStringUTF8; 

responseStringASCII = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding]; 
if (!responseStringASCII) 
{ 
    // ASCII is not working, will try utf-8! 

    responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
} 
else 
{ 
    // ASCII is working, but check if UTF8 gives less characters 

    responseStringUTF8 = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

    if(responseStringUTF8 != nil && [responseStringUTF8 length] < [responseStringASCII length]) 
    { 
     responseString = [responseStringUTF8 retain]; 
    } 
    else 
    { 
     responseString = [responseStringASCII retain]; 
    } 

    [responseStringUTF8 release]; 
} 

[responseStringASCII release];