2012-03-22 70 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];