1

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

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 的情况下打开它?

4

1 回答 1

1

好吧,IMO 的重点是,如果不指定应该使用哪种编码来解释这些字节,就不能从某些字节创建字符串。

你不知道,这很好,操作系统也不知道,那根本行不通。将使用编码,因此最好指定一个。

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

于 2012-07-31T15:21:25.257 回答