JDBC Encoding Converter ver.1.0
ローカライズされていない JDBC ドライバを日本語対応にする
Download jec10.zip (42,799 bytes)
概要
ローカライズされていない JDBC ドライバ の中には、Java の文字コードとして用いられている Unicode と、データベースに格納されているローカルな文字コードとのエンコーディングの変換を、上位バイトへの定数 00H の付加や削除だけで行うものがあります。ローカルな文字コードが ASCII コードだけならこれでも問題はないのですが、シフト JIS や EUC のように、1 文字が 2 バイト以上で表される文字の場合には、正しい変換が行われず、文字が化けてしまいます。JDK 1.1 や Java 2 SDK に含まれている JDBC-ODBC ブリッジドライバの sun.jdbc.odbc.JdbcOdbcDriver も、このような変換をするドライバのひとつです。
またドライバがブリッジドライバの場合には、ブリッジ先の ODBC ドライバやネイティブドライバがローカライズされていると、それらのドライバ自身が返す属性やエラーメッセージも、ローカルな文字コードでエンコードされていることが考えられます。このような場合、そういったデータに関しても文字コードの変換に失敗し、文字化けが発生する可能性があります。
JDBC Encoding Converter (以後 JEC と表記) は、このようなドライバやドライバから生成されるオブジェクトを全てラップし、それぞれの API 呼び出しにおいて、指定されたエンコーディングへの相互変換を行います。変換はデータベース上のデータだけでなく、メタデータやエラーメッセージなどに対しても行われます。
注意事項
1. ローカライズされていない JDBC ドライバが、どのデータを、どのようなエンコーディングとみなして処理を行うかは、ドライバの実装によって違ってきます。ですから全てのドライバに対して、JEC が正しい変換を行えるとは限りません。オリジナルのドライバが、上位バイトへの 00H の付加や削除により Unicode との変換を行う場合にのみ正しく動作します。
2. 多くの場合、ドライバがローカライズされていないと、API が返すデータには間違って変換されたローカルな文字コードと ASCII コードとが混在します。これに対し、JEC はこれらのデータのエンコーディングを区別せずに、全てを同じ種類の文字コードとみなして、Java の文字データに変換しようとします。このような場合には、ASCII コードをローカルな文字コードとみなしていることになりますが、ローカルな文字コードが ASCII 文字セットを含んでいることが多いため、結局、問題なく変換されてしまうようです。
3. 作者は JDK 1.1.X と Java 2 SDK v 1.2 に含まれる JDBC-ODBC ブリッジ (sun.jdbc.odbc.JdbcOdbcDriver) と、MS-Access 用 ODBC ドライバの Microsoft Access Driver (odbcjt32.dll)、または Oracle7 用 ODBC ドライバの Oracle73 (sqo32_73.dll) での組み合わせでしか動作の確認をしておりません。他のドライバどうしの組み合わせや、タイプ1 (JDBC-ODBC ブリッジ) 以外の JDBC ドライバでの使用、SJIS 以外のエンコーディングでの変換などに関しては、環境がないためにテストを行っておりません。ですから、それらのケースにおいて正常に動作しないことも考えられます。
4. 現バージョンでは、ドライバでの実装いかんに係わらず、UnicodeStream は mark/reset をサポートしません。
5. UnicodeStream によるデータの書き込みは、書き込む全データを一旦メモリ中に置きます。
実行環境
JDBC ドライバが利用できる Java 1.1、または Java 2 プラットフォーム。
著作権等
JDBC Encoding Converter の使用、転載、配布に関する制限はありません。作者への連絡も不要です。
JDBC Encoding Converter は「岩月光政」の著作物です。但しこのプログラムの使用により生じたいかなる損害に対しても、作者は保証する義務を負いません。