2tch制作中に気づいたことだが,subject.txtをデコードしようとすると,NSDataがたまにデコードに失敗する.
デコード対象サンプル(2chのsubject.txtです.権利的に問題があれば削除します)
なんでだろう・・・・.
ということで,文字化けするファイルから,改行コードをバイナリでサーチし,一行切り取ってデコードしてみたところ,デコード成功.????どういうこと?
decodeNSDataの中身は,ただのinitWithData:encoding:で,順番に色々な文字コードでデコードをしていく関数.

NSData *data = [NSData dataWithContentsOfFile:@"/Users/sonson/Desktop/subject.txt"];
int length = [data length];
char*p = [data bytes];
int i,head = 0;
for( i = 0; i < length; i++ ) {
id pool = [[NSAutoreleasePool alloc] init];
char c = *p++;
if( c == 10 ) {
NSData *sub = [data subdataWithRange:NSMakeRange( head, i-head )];
NSLog( decodeNSData( sub ) );
head = i + 1;
}
[pool release];
}

上記のコードでは,改行があるところまで読み込んで,デコードするように実装した.
んで,さらに行数を増やしながらデコードしたところ,ある行数からデコードに失敗しやがる.

NSData *data = [NSData dataWithContentsOfFile:@"/Users/sonson/Desktop/subject.txt"];
int length = [data length];
char*p = (char*)[data bytes];
int i;
for( i = 0; i < length; i++ ) {
id pool = [[NSAutoreleasePool alloc] init];
char c = *p++;
if( c == 10 ) {
NSData *sub = [data subdataWithRange:NSMakeRange( 0, i )];
NSString *decoded = decodeNSData( sub );
NSLog( decoded );
}
[pool release];
}

んで,さらにつっこんで,失敗の原因がデコード対象のサイズにあるのでは?失敗する行数と成功する行数の間で境界を探してみた.
39295バイト当たりから失敗し始める.
とは言っても,別のsubject.txt(しかもサイズがさらにでかいもの)では失敗しなかったので・・・.原因不明.
とりあえず,対策は・・・・・行単位で切り出しかなぁ・・・.