• 締切済み

日本語が文字コードによってはエンコード出来ない?

以下のソースを実行したところ、getBytes()に渡す文字コードによっては、 「??????????」 というように文字化けをするのですが、原因を教えてください。 -----ソース----- import java.io.UnsupportedEncodingException; public class hoge { public static void main(String[] args) { String str = "ほげもがフンコロガシ"; try { System.out.println( new String(str.getBytes("ISO8859_1"), "MS932")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } --------------- -----出力結果----- str.getBytes("ISO8859_1") の場合 「??????????」 str.getBytes("MS932") の場合 「ほげもがフンコロガシ」 str.getBytes() の場合(引数無し) 「ほげもがフンコロガシ」 ------------------ -----環境情報----- OS:WindowsXP_sp3(32bit) Eclipse:Eclipse Java EE IDE for Web Developers(Helios Build id: 20100617-1415) JRE/JDK:jdk1.4.1_06 ------------------

みんなの回答

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.5

ANo.3の方が既に書いていますが、ISO-8859-1の文字集合は平仮名や片仮名を含んでいません。getBytes("ISO8859_1")の結果の配列が ? ばかりになるのは正しい動作です。日本語の文字列をgetBytes()したい場合は日本語の文字を含むエンコーディングを指定してください。 「正常動作する端末がある」と書かれていますが、ISO8859_1で日本語が文字化けしない端末があるのならそちらが間違っています。 引数を指定しないgetBytes()ではデフォルトエンコーディングが使われます。Windowsの日本語環境ならMS932がデフォルトなので、getBytes()はgetBytes("MS932")と同じ意味になります。Linuxとか英語版Windowsだとデフォルトエンコーディングは異なります。

回答No.4

プロパティか・・・。 native2asciiとかぐぐってみてください。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

元の文字列は ISO-8859-1 で表現できません. あきらめてください.

参考URL:
http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#getBytes%28java.lang.String%29
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

いったいどういう結果を期待しているんだろう.

banshibo
質問者

補足

言葉足らずで申し訳ありません。 文字化けさせずに、「ほげもがフンコロガシ」と出力させたいのです。 というか、出力されるハズなのですが、出力されないので質問させて頂きました。 もう少し正確に補足させて頂きます。 既存のWebAPのプロパティファイルからの日本語読み込む処理において、 上記のように文字コードを変換しており、正常に動作しております。 しかし、私の環境に移行したところ、出力結果に文字化けが発生しました。 ソースを追って、getBytes()までたどり着いたのですが、 文法や使用方法に誤りがなさそうなことと、正常動作する端末があることから、 環境のどこかがおかしいと思うのですが、見当が付かず、こちらで質問させて頂きました。 Webサーバや設定との原因切り分けのために、質問にあるようなサンプルを作ってみたのですが、 私の環境ではgetBytes()でおかしな挙動をしています。 他にこの環境情報が必要ということであれば、仰ってください。 確認して補足致します。 --なお、文法や使用方法について確認する際に見たサイトは以下の通りとなります。 http://hisa-net.ddo.jp/php/java/encode.php http://hp.vector.co.jp/authors/VA017148/java/encoding.html

回答No.1

エンコードとデコードで違う文字コードを指定しているからでは。

banshibo
質問者

補足

確認しました。 ----- System.out.println( new String(str.getBytes("ISO8859_1"), "ISO8859_1")); ----- 上記の様にしても、事象は変わらず、「??????????」と羅列されます。 どうも、getBytes("ISO8859_1")から帰って来たバイト配列を見ると、 全て「63」、アスキーコード表でみると「?」なので、この関数の時点でおかしくなっているようです。

関連するQ&A