• ベストアンサー

String <=> byte配列 の際のエンコード

なんで、 String str = "あいうえお"; byte[] temp = str.getBytes("8859_1"); String str2 = new String(temp, "8859_1"); System.out.println(str2); このコードが ????? を出力するかわかる方、おしえてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

Harry_ さんの回答履歴を見る限り、あなたはこの質問の答えがわかっていて当然だと思うのですが…… 8859_1 は、欧文用のエンコードですよね。半角英数字などの欧文用文字には対応していますが、日本語のひらがなや漢字には対応していません。ですから、日本語を 8859_1 エンコードで表そうとしても不可能です。 したがって、コードの2行目で getBytes メソッドの返すバイト配列は、この時点で 0x3f 0x3f 0x3f 0x3f 0x3f (?????) になっています。 もちろん、3行目の 8859_1 エンコードによるバイト配列から Unicode の文字列に変換する作業はうまくいっています。ただし、引数のバイト配列の中身は、「?????」なのです。

Harry_
質問者

お礼

回答ありがとうございます。 8859-1エンコードには日本語文字も含まれていると ずっと勘違いしていました。 >Propertiesクラスのloadメソッドは、ストリームをISO8859_1として >読み込みます。この中で、バイト配列→Stringオブジェクトの誤った >変換がなされているので、 回答履歴というのは、このことだと思います。 非常にはずかしい話ですが、8859-1が日本語を表すことができない、 という意味ではなく、単にMS932と異なるエンコードだから 誤変換している、というつもりで回答しておりました。 これに続いて書いた、ちゃんと動かないコードから私の勘違いが 見てとれると思います。 最近になって、そのコードがうまく動作しないことに気づき、 今回の質問をさせてもらうことにしました。 確認もしないで回答したことは、深く反省しています。 ありがとうございました。

関連するQ&A

専門家に質問してみよう