目标c中的内存映射,不知道文件编码

时间:2012-07-31 15:16:08

标签: objective-c macos encoding character-encoding

我有一个程序扫描一个大文件,寻找一些文本。 这里加载文件的两行将它映射到内存中,以避免在文件大的情况下完全加载它。

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的情况下打开它,因为我不知道编码文件有什么作用?

1 个答案:

答案 0 :(得分:1)

嗯,关键是,IMO,你不能从某些字节创建一个字符串,而不指定应该使用哪种编码来解释这些字节。

你不知道,也没关系,操作系统也不会知道,而这根本行不通。将使用编码,因此如果指定一个编码,则最好。

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