Ios 来自char*的CFStringRef,不提供编码类型

Ios 来自char*的CFStringRef,不提供编码类型,ios,utf-8,utf-16,cfstring,nsstringencoding,Ios,Utf 8,Utf 16,Cfstring,Nsstringencoding,我有一个C字符串: unsigned char* contents = readInFile(path); //sting bytes in some unknown NSStringEncoding encoding. 我想知道内容的当前值。我想在不使用NSString usedEncoding方法的情况下执行此操作 我需要内容中的CFStringRef,而不需要引入新的字符串编码 NSString* contentsString = [NSString stringWithCString:

我有一个C字符串:

unsigned char* contents = readInFile(path); //sting bytes in some unknown NSStringEncoding encoding.
我想知道内容的当前值。我想在不使用
NSString usedEncoding
方法的情况下执行此操作

我需要内容中的
CFStringRef
,而不需要引入新的字符串编码

NSString* contentsString = [NSString stringWithCString:(char *)contents];
引入默认编码,因此会把事情搞砸。如何直接从内容创建
CFStringRef

一旦我有了这个,我可以:

CFStringEncoding cfStringEncoding = CFStringGetFastestEncoding((CFStringRef)contentsString);
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(cfStringEncoding);

是否可以将文件作为NSData对象读入,然后使用CFStringCreateWithBytes(),指定UTF8作为编码?如果数据中有一个标记前缀,该方法可能会忽略您对UTF8的建议并使用它。除非您知道其编码,否则无法将文件读入字符串。通常在这种情况下使用ISO-8859-1(或脆弱的字符集检测试探法,但这很复杂),因为它将每个字节转换为一个字符,直接从字节值映射到Unicode代码点。