Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 获取NSData的编码类型_Ios_Objective C_Encoding_Nsstring_Nsdata - Fatal编程技术网

Ios 获取NSData的编码类型

Ios 获取NSData的编码类型,ios,objective-c,encoding,nsstring,nsdata,Ios,Objective C,Encoding,Nsstring,Nsdata,我有一些数据块是用随机技术编码的,比如说第一块是用NSUTF8StringEncoding编码的,另一块是用NSASCIIStringEncoding或kCFStringEncodingWindowsArabic编码的 我不知道哪个块是用哪种编码类型编码的。我尝试了多个选项,例如,如果结果为零,则使用nsnonlossysistringencoding解码,但没有效果。是否有任何方法可以确定特定的数据块是用编码类型编码的 任何帮助都将不胜感激。您可以在此处找到问题的答案: 这是一个复制粘贴代码,

我有一些数据块是用随机技术编码的,比如说第一块是用
NSUTF8StringEncoding
编码的,另一块是用
NSASCIIStringEncoding
kCFStringEncodingWindowsArabic
编码的

我不知道哪个块是用哪种编码类型编码的。我尝试了多个选项,例如,如果结果为零,则使用
nsnonlossysistringencoding
解码,但没有效果。是否有任何方法可以确定特定的数据块是用编码类型编码的


任何帮助都将不胜感激。

您可以在此处找到问题的答案:

这是一个复制粘贴代码,适用于用户MiiChiel的ARC,因为这是一个很好的答案。“如果ASCII和UTF8都返回一个字符串。例如:UTF8给我一些额外的字符(负结果),ASCII显示正确的字符(正结果)。”

NSString*responseString、*responseStringASCII、*responseStringUTF8;
responseStringASCII=[[NSString alloc]initWithData:responseData encoding:NSASCIIStringEncoding];
如果(!responseStringASCII)
{
//ASCII不工作,将尝试utf-8!
responseString=[[NSString alloc]initWithData:responseData编码:NSUTF8StringEncoding];
}
其他的
{
//ASCII正在工作,但请检查UTF8是否提供较少的字符
responseStringUTF8=[[NSString alloc]initWithData:responseData编码:NSUTF8StringEncoding];
if(responseStringATF8!=nil&&[responseStringATF8长度]<[responseStringASCI长度])
{
responseString=[responseStringUTF8 retain];
}
其他的
{
responseString=[responseStringASCII retain];
}
}

我希望这能对您有所帮助。

您可以在这里找到问题的答案:

这是一个复制粘贴代码,适用于用户MiiChiel的ARC,因为这是一个很好的答案。“如果ASCII和UTF8都返回一个字符串。例如:UTF8给我一些额外的字符(负结果),ASCII显示正确的字符(正结果)。”

NSString*responseString、*responseStringASCII、*responseStringUTF8;
responseStringASCII=[[NSString alloc]initWithData:responseData encoding:NSASCIIStringEncoding];
如果(!responseStringASCII)
{
//ASCII不工作,将尝试utf-8!
responseString=[[NSString alloc]initWithData:responseData编码:NSUTF8StringEncoding];
}
其他的
{
//ASCII正在工作,但请检查UTF8是否提供较少的字符
responseStringUTF8=[[NSString alloc]initWithData:responseData编码:NSUTF8StringEncoding];
if(responseStringATF8!=nil&&[responseStringATF8长度]<[responseStringASCI长度])
{
responseString=[responseStringUTF8 retain];
}
其他的
{
responseString=[responseStringASCII retain];
}
}

我希望这能对您有所帮助。

Objective C包含一种内置的方法,用于检测嵌入到NSData中的字符串的编码

(注意,如果您的情况是这样的,您仍然需要将每个块划分为单独的NSData对象。)


目标C包括一种内置的方法,用于检测嵌入NSData中的字符串的编码

(注意,如果您的情况是这样的,您仍然需要将每个块划分为单独的NSData对象。)



那时候编码机制就被破坏了。您的问题没有完美的解决方案。如果您使用Web服务检索数据,则响应标题可能会提示您“Charset”值中的编码。@Larme很好的建议,但我不是从Web服务检索数据。恐怕您随后必须测试所有编码,这是一项艰巨的任务:(该编码机制已被破坏。您的问题没有完美的解决方案。如果您使用Web服务检索数据,响应头可能会提示您“字符集”中的编码。)值。@Larme很好的建议,但我不是在从WebService检索数据。我担心您可能需要测试所有编码,并找到一种方法将一种编码确定为正确编码。这是一项艰巨的任务:(我已经检查过了,有很多编码,你认为它是可行的解决方案吗?明白了。我会说你的问题有一个启发式的答案,但我不认为有一个不合法的解决方案。让我们希望我得到我想要的,否则我将不得不写一个非常长的脚本:(因此,如果你可以为你的对象创建一个类别,并将encodetype保存到它。我已经检查过了,有很多编码。你认为可行的解决方案是什么?明白了。我会说你的问题有一个启发式的答案,但我不认为有一个不合法的解决方案。让我们希望我得到我想要的,否则我将不得不这样做。)写一个很长的脚本:(如果你能为你的对象创建一个类别并保存编码类型)。
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];
    }

}
NSData* data = // Assign your NSData object...

NSString* string;
NSStringEncoding encoding = [NSString stringEncodingForData:data encodingOptions:nil convertedString:&string usedLossyConversion:nil];