つーか正確には今回の場合はバックで働いているicuがそういうエンコードを持ってるかどうか、ってことになりそうなんだが。
"(new String(bytes, 0, bytes.length, "...")).getBytes() == bytes" となるようなエンコーディングってないかな、とちょっと考えている。Latin-1とかだと8bit目が立ってるbyteがUnicodeに変換したときにどっかにすっとんでしまってgetBytes()したときには晴れて2bytes以上のなにかになってしまう。
試してないけどUS_ASCIIとかだと案外無視ってくれるんだろうか。何か例外飛びそうだけど……
なんでそんなのが必要かというと、
- 入力として受け取るファイルのエンコーディングは定かではないが大体においてASCII。
- 改行は\r\nとして、BufferedReader の恩恵は預かりたい。
- 途中でbyte列の一部を指定されたエンコーディングでStringに別途直さなければいけない
とかいう要求のため。
んー、しかし仮にそれがあったとしてもShift_JISが混入していて2byte目が\nとかだったりするとBufferedReaderが誤認識する可能性があるのかなぁ……。BufferedReaderに"\r\nのみ改行とする"と伝えることは出来なそうだし。。。
あれ、そんなのないのか?
Shift_JISの2バイトコードの空間は、第1バイトが0x81-0x9Fならびに0xE0-0xFC、第2バイトが0x40-0x7Eならびに0x80-0xFCである。したがって...
ならば上のようなエンコーディングさえあればいいってことだな。
んー。助けを請う