[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00017] Re: データベースからの得たデータの文字コード変換



On Sat, 23 Nov 2002 15:12:19 +0900 , Yoshiyasu Hayashi wrote:

> >これって、SJIS文字列をEUC_JPに変換してません?
> >String sound = new String(sound_e.getBytes("EUC_JP"), "SJIS");
> >でもダメですか?
> すいません逆でした。でもコンソールの表示はやはり8859_1変換されてしまい表
> 示はかわりませんでした。

> String sound = new String(sound_e.getBytes("EUC_JP"), "SJIS");で
> SJIS,JISAutoDetect,EUC_JP,EUCJIS,Unicode,8859_1,MS932など色々組み合わせ
> てやってみたもののうまくSJISに変換されません。

すみません。私の説明も間違っていました。

上記コードは、EUC_JPのバイト列を無理矢理SJISで読み込もうとしてい
るため、あなたの期待通りに動作しないでしょう。つまり、単に文字列
を表示したいのであれば、sound_eを表示すれば良いです。

上記でEUC_JPのバイト列を取得して表示した結果は、"B8FAB2CCB2BB41"
と正しく表示されていますよね?つまり、遠藤さんの指摘通り、

> MySQL の上では EUC-JP のようですが、JDBC 内部は Unicode に変換されます。

が正常に行われていると思われます。

String sound = new String(sound_e.getBytes("EUC_JP"), "SJIS");
System.out.println("trace   :" + Tracer.toHex(sound.getBytes()));

は、

System.out.println("trace   :"+
   Tracer.toHex(sound.getBytes("SJIS")));

とすれば、あなたの期待通りに動作するのでは?


> 最初WindowsXPで開発し、動作させたときは文字コードを意識しなくても
> うまくいったのですが、Linuxで再開発するとやはり文字化けを起こしました。

Windows環境とUnix環境のデフォルトのfile.encodingの設定の違いによ
り上手くいかなかった可能性がありますが、コンソールに表示するサン
プルプログラムしか提示されていないので、実際の所はどこがいけない
のかは分かりません。

SJISにしたいということがよく分からないのですが、OutputStreamに対
してsound.getBytes("SJIS")で取得したバイト列を直接書き出せば出来
ません?

---
石神 覚司(Satoshi Ishigami)   VIC TOKAI CORPORATION