- PR -

JDBC文字化け

1
投稿者投稿内容
tsuyori
常連さん
会議室デビュー日: 2002/06/18
投稿数: 23
投稿日時: 2002-06-27 10:50
つよりと申します。

以下の環境で開発を行っており、文字化けで悩んでいます。

JDKバージョン:jdk1.4.0_01-B03
データベースサーバ:RedHat7.2 informix Dynamic Setver 9.21.UC4
JDBCドライバ:JDBC Informix JDBC バージョン2.21
クライアントOS:Windows2000

文字ばけの内容としては
第3水準の漢字(IBM拡張文字)で「立ち崎」や「はしご高」が「?」になってしまいます。

ちょうど、WEB+DBに該当記事が出ていたのですが、解決にはいたりませんでした。

サーバはSJISで構成されています。

JDBCのURL内で「NEWLOCALE=ja_JP,ja_JP;NEWCODESET=SJIS,sjis-s,932」文字コードの指定を行っています。

この環境でgetString()により値を取得すると、「立ち崎」はunicodeの場合、fa11のはずなのですが、「fffd」で取得されており、表示上は「?」になっていました。

http://www02.so-net.ne.jp/~kikuta/jdbcnote/jdbc6_1.html
こちらのサイトを参考にさせていただいて、
String( value.getBytes( "8859_1" ), "SJIS" )
で、変換を行おうとしたのですが、ほかの文字まで文字化けしてしまいました。

informixの場合、URLの設定にも問題があるとは思うのですが、なにかご存知のことがありましたら、よろしくお願いします。


しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-06-27 22:12
記事の書き方悪かったかな…

MS-CP932 の立ち崎、はしご高は第3水準(JIS X 0213)じゃありませんよ。
# JIS X 0213 は Windows では扱えませんし、扱うつもりもないようです。
# 同じ文字が扱えるようになったとしても、それはあくまで Unicode の一部として、です。

記事にも書きましたが、各コンポーネントでの「シフトJIS」がなんであるか確認してください。
String( value.getBytes( "8859_1" ), "SJIS" ) では機種依存文字は扱えません。
SJIS ではなく MS932 や Windows-31J を使ってください。

「NEWCODESET=SJIS,sjis-s,932」だと JDK encoding が SJIS ですから、当然、機種依存文字は使えません。sjis-s,932 がどうかは私にはわかりません(Informix 知らないんで)。が、見た感じではだいじょうぶそうに見えはしますね。

「NEWCODESET=MS932,sjis-s,932」なんじゃないですか?

[ メッセージ編集済み 編集者: しょむ 編集日時 2002-06-27 22:20 ]
tsuyori
常連さん
会議室デビュー日: 2002/06/18
投稿数: 23
投稿日時: 2002-06-28 19:24
>MS-CP932 の立ち崎、はしご高は第3水準(JIS X 0213)じゃありませんよ。
># JIS X 0213 は Windows では扱えませんし、扱うつもりもないようです。
># 同じ文字が扱えるようになったとしても、それはあくまで Unicode の一部として、です。
第3水準と書いたのは、IME-2000の文字一覧のカテゴリが「漢字3」になっていたので、そういう表現を使ってしまいました。まぎらわしい表現で申し訳ありません。

>「NEWCODESET=MS932,sjis-s,932」なんじゃないですか?
はい、その通りでした。
imformixのドキュメントには、「MS932」については、対応しているように書かれていなかったのですが、大丈夫でした。

ありがとうございました。
もう一度、記事を読み直して見ます。
1

スキルアップ/キャリアアップ(JOB@IT)