我正在检索包含UTF8或ASCII编码文本的超文本标记语言。最常见的用法是ASCII解码,它可以正确显示文本:
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];现在我有了另一个使用UTF8编码的超文本标记语言页面,所以我必须使用:
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];在加载网站时,我检索的编码类型是随机的。我的问题是,有没有一种方法可以检查NSData,以确定使用哪种解码的权利?所以我知道我需要使用哪种编码类型。
太好了!
发布于 2012-03-23 00:27:59
我不知道是否可以检查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发布于 2012-03-23 17:47:37
虽然Heliem answer很有用,但如果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];https://stackoverflow.com/questions/9825542
复制相似问题