NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *str = [[NSString alloc] initWithData:data encoding:NSShiftJISStringEncoding];

↑で、dataの中に変な機種依存文字が1文字でも入ってると、
2行目のinitWithData:encoding:でエンコーディングに失敗してstrが空っぽで帰ってきてしまいますよね ?←こういうの
エンコード出来ない文字だけを事前に除外して、それからエンコードする方法って何かありませんかね