获取NSData的编码类型

时间:2016-05-24 10:42:28

标签: ios objective-c encoding nsstring nsdata

我有一些用随机技术编码的数据块,比如第一个块由NSUTF8StringEncoding另一个NSASCIIStringEncodingkCFStringEncodingWindowsArabic编码。

我不知道哪个块使用哪种编码进行编码。我尝试了多种选择,例如如果结果是nil然后用NSNonLossyASCIIStringEncoding解码,但无济于事。有没有办法确定一个特定的数据块是用编码类型编码的?

任何帮助将不胜感激。

2 个答案:

答案 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];