No.070 | 投稿日時: | 2003/05/19(月) 23:14 <↑親記事:No.069> |
投稿者: | 森山 将之 |
> UTF-8 と EUC_JP (eucJP-open) のユーザー定義外字の変換は、微妙にバグってい
> るみたい…
期待される動作になるようなパッチを作ってみました。
以下は、pgsql-jp メーリングリストに流した内容
(1) UTF-8 ⇔ EUC_JP (eucJP-open/eucJP-ms) の UDC マッピングの不具合
・EUC(UDC) の最終バイトが 0xa1 となるべきものが 0xff となっている。
・EUC(UDC) の最終バイトが 0xa1 のコードが間違っている。
・EUC(UDC) の最終バイトが 0xa2 のコードが抜け落ちている。
・EUC -> UTF-8 で変換できないコードがあった。(配列の要素数の数
え間違いと思われます)
TOG 日本ベンダ協議会の次のマッピングをそのまま用いると間違い
は無いと思われます。(大文字のローマ数字、(株)、No.、TEL に関
して重複符号化されていますが、13区のNEC特殊文字を使うのが妥
当ではないかと思われます。現状もそうなっていますし。)
http://www.opengroup.or.jp/jvc/cde/appendix.html
※Microsoft Windows 3.51 式の変換 (eucJP-ms) のマッピングを使う。
(2) UTF-8 → SJIS (MS932) のマッピングに関して
・大文字のローマ数字および、(株)、No.、TEL のマッピングが、
Windows の WideCharToMultiByte() のマッピングと異なり、Java
の Cp943C コンバータと同一のマッピングとなっているようです。
Windows でのマッピングは次のようになっています。(大文字のロー
マ数字等は、NEC特殊文字の 13区を使う)
マイクロソフト サポート技術情報 - JP170559
[PRB] SHIFT - JIS と Unicode 間の変換問題
http://support.microsoft.com/default.aspx?scid=kb;ja;JP170559
上記の不具合および Windows のエンコーディング変換との不一致を修
正するパッチを次の場所に置いておきます。
http://www2d.biglobe.ne.jp/~msyk/software/postgresql-7.3.2.ja.diff.gz
※ postgresql-7.3.2 からの直接パッチになります。
パッチの当て方
postgresql-7.3.2
$ tar zxvf postgresql-7.3.2.tar.gz
$ zcat postgresql-7.3.2.ja.diff.gz | patch -p0
postgresql-7.3.1 (7.3 の場合も同様)
$ tar zxvf postgresql-7.3.1.tar.gz
$ cd postgresql-7.3.1
$ zcat ../postgresql-7.3.2.ja.diff.gz | patch -p1
UNICODE/EUC_JP の両データベースに対して、Windows-31J(MS932) で
ユーザー定義外字領域を含む文字定義のある全コードポイントについ
て、psql 経由で、UNICODE、SJIS(MS932)、EUC_JP(eucJP-open) のそ
れぞれで読み書きして、正しく変換される事を確認しました。