OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 暇なときにでも
  • 質問No.238584
  • 閲覧数382
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 63% (14/22)

なんで、

String str = "あいうえお";
byte[] temp = str.getBytes("8859_1");
String str2 = new String(temp, "8859_1");
System.out.println(str2);

このコードが ????? を出力するかわかる方、おしえてください。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル13

ベストアンサー率 50% (604/1207)

Harry_ さんの回答履歴を見る限り、あなたはこの質問の答えがわかっていて当然だと思うのですが……


8859_1 は、欧文用のエンコードですよね。半角英数字などの欧文用文字には対応していますが、日本語のひらがなや漢字には対応していません。ですから、日本語を 8859_1 エンコードで表そうとしても不可能です。

したがって、コードの2行目で getBytes メソッドの返すバイト配列は、この時点で
0x3f 0x3f 0x3f 0x3f 0x3f (?????)
になっています。

もちろん、3行目の 8859_1 エンコードによるバイト配列から Unicode の文字列に変換する作業はうまくいっています。ただし、引数のバイト配列の中身は、「?????」なのです。
お礼コメント
Harry_

お礼率 63% (14/22)

回答ありがとうございます。
8859-1エンコードには日本語文字も含まれていると
ずっと勘違いしていました。


>Propertiesクラスのloadメソッドは、ストリームをISO8859_1として
>読み込みます。この中で、バイト配列→Stringオブジェクトの誤った
>変換がなされているので、

回答履歴というのは、このことだと思います。
非常にはずかしい話ですが、8859-1が日本語を表すことができない、
という意味ではなく、単にMS932と異なるエンコードだから
誤変換している、というつもりで回答しておりました。
これに続いて書いた、ちゃんと動かないコードから私の勘違いが
見てとれると思います。
最近になって、そのコードがうまく動作しないことに気づき、
今回の質問をさせてもらうことにしました。
確認もしないで回答したことは、深く反省しています。

ありがとうございました。
投稿日時 - 2002-03-24 03:16:12
-PR-
-PR-
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ