真 もわ爛漫

しゃーら、しゃーらしゃーら

Javaでbyte列をbyte列のまま持ってくれるようなencodingはないか

つーか正確には今回の場合はバックで働いている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である。したがって...

Shift_JIS - Wikipedia

ならば上のようなエンコーディングさえあればいいってことだな。

んー。助けを請う