Objective c objectivec中的内存映射,而不知道文件编码

Objective c objectivec中的内存映射,而不知道文件编码,objective-c,macos,encoding,character-encoding,Objective C,Macos,Encoding,Character Encoding,我有一个程序,可以扫描一个大文件,寻找一些文本。 这里有两行代码加载文件并将其映射到内存中,以避免在文件较大时完全加载 NSData *buf = [NSData dataWithContentsOfFile:sourceFile options:NSDataReadingMappedIfSafe error:&err]; NSMutableString *string = [[NSMutableString alloc] initWithBytesNoCopy:(void *)buf.

我有一个程序,可以扫描一个大文件,寻找一些文本。 这里有两行代码加载文件并将其映射到内存中,以避免在文件较大时完全加载

NSData *buf = [NSData dataWithContentsOfFile:sourceFile options:NSDataReadingMappedIfSafe error:&err];
NSMutableString *string = [[NSMutableString alloc] initWithBytesNoCopy:(void *)buf.bytes length:buf.length encoding:NSASCIIStringEncoding freeWhenDone:NO];

如果我不知道编码文件有什么,我怎么能在不提供NSASCIIStringEncoding的情况下打开它呢?

我想,关键是,如果不指定应该使用哪种编码来解释这些字节,就无法从某些字节创建字符串

你不知道,这很好,操作系统也不知道,这根本不起作用。将使用一个编码,因此如果指定一个,您会感觉更好


另一方面,如果您确实对此感到困扰,并且预见到需要支持各种编码,请记住,如果指定了错误的编码,那么字符串创建将失败(得到零)。如果发生这种情况,您可以尝试使用不同的编码,以此类推,直到找到适合您的编码。(前提是您的数据可以表示为字符串)。

在我看来,关键是,如果不指定应该使用哪种编码来解释这些字节,就无法从某些字节创建字符串

你不知道,这很好,操作系统也不知道,这根本不起作用。将使用一个编码,因此如果指定一个,您会感觉更好

另一方面,如果您确实对此感到困扰,并且预见到需要支持各种编码,请记住,如果指定了错误的编码,那么字符串创建将失败(得到零)。如果发生这种情况,您可以尝试使用不同的编码,以此类推,直到找到适合您的编码。(前提是您的数据完全可以表示为字符串)