检查NSData是否包含ASCII或UTF8编码

我正在检索包含UTF8或ASCII编码文本的HTML。 对于最常见的使用,它是ASCII解码,可以正确显示文本:

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

现在我有另一个UTF8编码的HTML页面,所以我必须使用:

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

加载网站时,我检索什么样的编码是随机的。 我的问题是,有没有办法来检查NSData什么样的解码是正确的使用? 所以我知道我需要使用哪种编码types。

日Thnx!

我不知道是否有可能检查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 

尽pipeHeliem答案很有用,但如果ASCII和UTF8同时提供一个string,则不是解决scheme。 例如: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];