[pgsql-jp: 25231] Re: Windows上JDBCでのエンコーディング

TANAKA Yoshihiro ytp @ vc-net.ne.jp
2002年 3月 11日 (月) 21:35:41 JST


田中 良浩 です。

On Mon, 11 Mar 2002 21:00:38 +0900
Tsunehisa Kazawa <kazawa @ sons.co.jp> wrote:

★まず最初にお礼です
たくさんの方からご意見を頂き、本当に有り難うございます。

事の発端は、
「〜」の文字(シフトJISの0x8160)が
ストリーム上→ JDBC  →アプリケーション
  0x8160      U+301C    U+301C→U+FF5E
ではなく
  0x8160      U+FF5E    U+FF5E
と渡って欲しい、ということでした。

>とはいえ、上記の問題は backend が Unicode で、かつ Shift JIS や
>EUC-JP や UTF-8 などいろいろなエンコーディングでデータを出し入れ
>する場合に問題になるだけで、
>
>DB backend 内では EUC-JP を利用していて、そこから単純に (JIS〜.TXT、
>CP932.TXT といったマップを使っていったん Unicode を経由するのでは
>なく) Shift JIS に変換するのであれば、どちらにせよ SJIS の方が正し
>いような気がしますね。

私の不勉強なんですが、そこでおっしゃる
「SJISにすべき」の意味をもう少し、詳しく教えていただけませんか?
ストリーム上→ JDBC  →アプリケーション
  0x8160      U+301C    U+301C→U+FF5E
これが正しいとする理由です。

私としては、
ストリーム上→ JDBC        →アプリケーション
  0x8160    U+301C→U+FF5E    U+FF5E
これでもいいのですが。

>#当初の田中さんのご意見からは大分ハズレてしまっていて申し訳ないです。

いえ、大変勉強になります。

私がプラットフォームのデフォルトエンコーディングにこだわる理由ですが、
これは、
「作ったアプリケーションはマルチプラットフォームで動くようにしたい」
です。

#加澤さん
>        System.out.println(t1 + ":SJIS=" + byte2str(t1.getBytes("SJIS"))
>            + ":MS932=" + byte2str(t1.getBytes("MS932")));

と似たコーディングをすれば一応解決なんですが、
このプログラムを異なるプラットフォームで動かすことが
出来なくなると思うんです。
"SJIS"の部分はDBから受け取った(ストリーム上に流れて来た)
データのコード体系を意味していてクライアント非依存なため
問題ないのですが、
"MS932"の部分はクライアントのエンコーディングなので問題になります。

では、"MS932"と書く代わりに、

#田中
>JVMが動作している環境のデフォルトエンコーディングは
>System.getProperty("file.encoding");
>と書けば取得出来ますよね。

をあちこちに書いていけば出来るのですが、
だったらJDBCドライバが処理したほうが1ヶ所で済むし、
アプリケーションのバグも減らせるだろうという発想だったんです。

フレームワークのようなものを構築する際には、
プラットフォームやRDBに依存する部分は1ヶ所だけで書いたほうがいいので、
今回のようなお話しをさせていただきました。

私の考え違いがあれば、ご指摘いただけると助かります。
------------------------------------
      田中 良浩(TANAKA Yoshihiro) / 日本インターシステムズ(株)
      E-mail:tanakay @ nisz.co.jp  -------------------------------






pgsql-jp メーリングリストの案内