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

Eiji Tokuya e-tokuya @ sankyo-unyu.jp
2002年 3月 12日 (火) 10:10:42 JST


徳家です。

結構悩まれていますね。(^^;)

私もそうでした。

> 田中 良浩 です。
>
> On Mon, 11 Mar 2002 21:35:41 +0900
> TANAKA Yoshihiro <ytp @ vc-net.ne.jp> wrote:
>
> >事の発端は、
> >「〜」の文字(シフトJISの0x8160)が
> >ストリーム上→ JDBC  →アプリケーション
> >  0x8160      U+301C    U+301C→U+FF5E
> >ではなく
> >  0x8160      U+FF5E    U+FF5E
> >と渡って欲しい、ということでした。
>
> たくさんの方からご指摘を頂き、
> 少なくとも今回私がやりたかったことは
> 次の方法で出来ることを確認いたしました。
> そもそもは、一発目の石井さんの返信の「charSetの部分」を
> 試していなかったのが敗因でした。
>
> ■ソース(変更部分)
> String server = "jdbc:postgresql://atak:5432/begin?charSet="
>                  + System.getProperty("file.encoding");
> con_ = DriverManager.getConnection(server, "ytp", "");
>
> ■結果
> C:\Source\Java>java  ytp.test.TestPostgre
> server=jdbc:postgresql://atak:5432/begin?charSet=MS932
> dbEncoding=SJIS encoding=MS932
> encoding on PC=MS932
> カーネーション
> かすみ草
> バラ
> 桃の花
> 東京〜新大阪
>
> このソースにまだ問題があることは認識しています。
> 「送られて来る文字がEUCだったらどうすんねん」とかです。
> それは別途修正するつもりです。
>
> お騒がせして本当に申し訳ありませんでした。>皆さん
> ------------------------------------
>       田中 良浩(TANAKA Yoshihiro) / 日本インターシステムズ(株)
>       E-mail:tanakay @ nisz.co.jp  -------------------------------

なぜ「〜」をU+301Cと変換してしまうかですが、変換テーブルのUnicodeバージョン
をご覧になれば、なんとなくおわかりいただけると思います。
UNICODEサイトにおける、SHIFTJIS.TXTはUnicodeのバージョンは1.1で、1.1にある文
字の範囲で、極力似た文字を選択したものですね。
ですから、これは正しく表現できてない文字も沢山あります。またマッピングテーブ
ルのバージョンも0.9と仮定のものです。
しかしこのマッピングを採用したものも多いので、そのまま生き残っています。
よって、JavaなどではSJIS(SHIFTJIS.TXT)とMS932(CP932.TXT)に分けることで対処し
ています。

CP932.TXTはUnicode2.0で、このUnicode2.0ではいくつかの追加文字にあわせ、マイ
クロソフトが自分たちの使っている多カ国語文字をUnicodeに申請して無い文字を追
加してもらっています。
ちなみにMacの機種依存文字はUnicode2.1で追加されて、JIS規格部はSHIFTJIS.TXTで
はなくCP932.TXTにあわせ、別にマッピングテーブルJAPANESE.TXTを公開していま
す。

Unicodeの対応バージョンの違いですね。

JavaともPostgreSQLとも違う文字コードの歴史が原因の話です。

順を追って考えればなんということない話なのですが・・・・・、ややこしいですよ
ね。


徳家




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