文字コード掲示板


記事表示


No.070投稿日時:2003/05/19(月) 23:14    <↑親記事:No.069>
投稿者:森山 将之

PostgreSQL 7.3.2 UDC 新パッチ

> 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) のそ
れぞれで読み書きして、正しく変換される事を確認しました。


Script : Sylpheed 1.24
Modified by MORIYAMA Masayuki