2012-07-31 47 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)。如果發生這種情況,您可以嘗試使用不同的編碼,等等,直到找到適合的編碼。 (假設您的數據可以表示爲字符串)。