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

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



はやし@札幌です。
お世話になっています。そのせつは遠藤様、石神様ありがとうございました。
データベースからの得たデータの文字変換について、1週間前からずっと考えて
きましたが今だ解決できていません。

現在データベースの内容をFLASHムービーで表示するWEBアプリケーションを開発
しています。最終的には得たデータからXMLファイルを生成しFlashでXMLファイ
ルを読み込み表示させます。FLASHの読み込める文字コードは"SJIS"または
"UTF-8"に限られます。

動作環境は
os:RedHatLinux7.3(LANG=ja_JP.eucJP)
kernel:2.4.18-3
javaSDK:1.4.0_01
appserver:tomcat-3.2.4
DB:MySQL-3.23.49(SJIS設定済)
JDBCドライバ:mmMySQLDriver(前回より変更しました)
コンソール画面の文字コード:EUC(前回より変更しました)
です。

データベースに格納したデータの文字コードはSJISです。
ここではそのデータの一部"効果音A"という文字列で考えて行きます。

また、データベースコネクション時に、
useUnicode=true&characterEncoding=SJISを設定しています。

データベースからResultSet rsにデータを格納し、
String sound_name = rs.getString(i++); ←ここで得られるデータは"効果音A"
でデータを取得します。
sound_nameをSystem.out.printlnを使ってコンソールに表示させると
"効果音A"と表示されます。コンソール画面はEUC設定なのでsound_name(効果音A)
はEUC_JPであることが解ります。

得たデータをSJISにしたいので、EUCからSJISに変換するために色々試みました。
sound = new String(sound.getBytes("XXX"),"XXX"); XXXは文字コード名が入
ります。例:SJIS,EUC_JP,JISAutoDetect,8859_1.......
"効果音A"(EUC)を"効果音A"(SJIS)に変換するために何通りも試してみましたが
うまくいきませんでした。また、EUCを1度Unicodeに変換してからSJISに変換す
るようなこと(2度変換)もやってみましたが。うまくいきませんでした。

デバックするためcinnamon(http://www2s.biglobe.ne.jp/~katsum/java/)という
クラスを使ってバイナリデータで検証もしました。
以下は、"効果音A"の各文字コードのバイナリデータです。
******************************************
none    :B8FAB2CCB2BB41 ←sound_name("効果音A"EUC_JP)
SJIS    :8CF889CA89B941
EUC_JP  :B8FAB2CCB2BB41
8859_1  :3F3F3F41
******************************************
SJISのバイナリデータを取得はできるのですがこれをnew Stringで文字列を生成
するとバイナリデータの文字列になってしまいます。(当たり前ですよね...)

どうしてもEUC_JPの文字列をSJISの文字列に変換することができません。

何度も申し訳ありませんが、是非アドバイスをいただけないでしょうか。
よろしくお願いいたします。