我有一些用随机技术编码的数据块,比如第一个块由NSUTF8StringEncoding
另一个NSASCIIStringEncoding
或kCFStringEncodingWindowsArabic
编码。
我不知道哪个块使用哪种编码进行编码。我尝试了多种选择,例如如果结果是nil然后用NSNonLossyASCIIStringEncoding
解码,但无济于事。有没有办法确定一个特定的数据块是用编码类型编码的?
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以在此处找到问题的答案:https://stackoverflow.com/a/9836989/2923506
这是一个适用于用户MiiChiel的ARC的复制和粘贴代码,因为它是一个很好的答案。 “如果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];
}
}
我希望这可以帮到你。
答案 1 :(得分:0)
目标C包含一种内置方法,用于检测NSData中嵌入的字符串的编码。
(请注意,如果您仍然需要将每个块都划分为单独的NSData对象。)
NSData* data = // Assign your NSData object...
NSString* string;
NSStringEncoding encoding = [NSString stringEncodingForData:data encodingOptions:nil convertedString:&string usedLossyConversion:nil];