1

大きなファイルをスキャンしてテキストを探すプログラムがあります。ここでは、大きなファイルの場合にファイル全体をロードすることを避けるために、メモリにマップするファイルをロードする 2 つの行があります。

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、バイトを解釈するために使用するエンコーディングを指定しないと、バイトから文字列を作成できないということです。

OSも知らないことはわかりませんが、それは問題ありません。それは単に機能しません。エンコーディングが使用されるため、エンコーディングを指定した方がよいでしょう。

一方、これに本当に悩まされ、さまざまなエンコーディングをサポートする必要があると予想される場合は、間違ったエンコーディングを指定すると、文字列の作成が失敗する (nil になる) ことに注意してください。その場合は、別のエンコーディングを試して、適切なエンコーディングが見つかるまで試してみてください。(データが文字列として表現できる場合)。

于 2012-07-31T15:21:25.257 に答える