文字コード掲示板


一括購読


No.068投稿日時:2003/05/18(日) 02:15    <親記事>
投稿者:森山 将之

PostgreSQL の EUC_JP は eucJP-open

なおかつ、Unicode との変換は、eucJP-ms となっているようです。
PostgreSQL に、EUC-JP でアクセスする場合は、この点に注意する必要があるよう
です。

eucJP-ms の変換は、次のページに書いたものと同じようです。(ポイントとなる部
分のみチェック)
http://www2d.biglobe.ne.jp/~msyk/charcode/cp932/eucJP-ms.html

Windows用のブラウザが EUC-JP で送信する場合は、コードページ 51932 と呼ばれ
る、NEC選定IBM拡張文字を使い、EUC の 3 バイトコードを使わないエンコーディ
ングになります。これは、いわゆる機種依存文字部分やユーザー定義外字について
eucJP-open とは互換性が無いため、CGI で PostgreSQL にアクセスしていて、エ
ンコーディングは EUC-JP を用いている場合には注意が必要となるかもしれません。

あと、データベースのエンコーディングを UNICODE とし、ClientEncoding を
SJIS とした場合は、Java の MS932 とほぼ等価のようですが、ユーザー定義外字
の変換をサポートしていないとか、厳密には大文字のローマ数字等の変換が、
Cp943C と同じになっているようです。(PostgreSQL 7.3 で確認)

PostgreSQL 初心者なものなので、文字コードまわりのチェックをしただけですが…


No.069投稿日時:2003/05/18(日) 04:05    <↑親記事:No.068>
投稿者:森山 将之

PostgresSQL 7.3.x の UDC パッチ

> あと、データベースのエンコーディングを UNICODE とし、ClientEncoding を
> SJIS とした場合は、Java の MS932 とほぼ等価のようですが、ユーザー定義外字
> の変換をサポートしていないとか、厳密には大文字のローマ数字等の変換が、
> Cp943C と同じになっているようです。(PostgreSQL 7.3 で確認)

ユーザー定義外字に関しては、次の場所にパッチがあるようです。
http://www.sankyo-unyu.co.jp/Pool/PostgreSQL.php

i-mode の絵文字は、ユーザー定義外字のコードポイントを使っていると思うのだ
けれども…「i-modeのコードも外すのが面倒なため」っていったいどういう意味?
UTF-8 と EUC_JP (eucJP-open) のユーザー定義外字の変換は、微妙にバグってい
るみたい…


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