2012-07-31 68 views
1

我有一个程序,扫描一个大文件寻找一些文本。 这里加载文件的两行代码将它映射到内存中,以避免在文件很大时加载它。不知道文件编码在objectivec中的内存映射

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

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

你不知道,也没关系,操作系统也不知道,那根本就行不通。编码将被使用,所以如果你指定一个编码,你会更好。另一方面,如果您对此感到困扰并预见到需要支持各种编码,请记住,如果指定了错误的编码,则字符串创建将失败(您将得到nil)。如果发生这种情况,您可以尝试使用不同的编码,等等,直到找到适合的编码。 (假设您的数据可以表示为字符串)。