[pgsql-jp: 35250] Re: IBM拡張文字の扱いについて

a_ogawa a_ogawa @ hi-ho.ne.jp
2005年 4月 14日 (木) 20:03:55 JST


小川です

> kkです。
>
> 例えばIBM特殊文字の1つである、
> 「さんずいに位」(SJISで ”FB40” )が、
> MS-Accessから、ODBCドライバ経由でPostgreSQL
> に格納すると、
> EUCの ”8FC7CB” に変換されてしまうことから判断すると、
>
> PostgreSQL側の
> CP932(Windows) <=> eucJP-open
> という変換表が使われている(機能している)
>
> と判断しました。
> この変換表はPostgreSQLのどこにあるのでしょうか?

IBM拡張文字の変換表は、postgresqlのソースコードにあります。
src/backend/utils/conversion_procs/euc_jp_and_sjisの、sjis.mapです。
変換ルールを変えたい場合、sjis.mapを変更してpostgresqlをコンパイルする
必要があります。

sjis.mapでは、1行ごとに1文字の変換ルールが記述されています。
例えば、FB40は以下のように定義されています。

{	0xEDE1	,	0xfb40   ,   0x8fc7cb	},

最初のコード(0xEDE1)はNEC selection IBM kanji、2番目(0xfb40)はIBM kanji、
3番目がEUC(0x8fc7cb)になっています。
SJISからEUCへ変換するときは、NEC->EUC, IBM->EUCというルールで変換されます。
EUCからSJISへ変換するときは、EUC->IBMへ変換されます。(NECは使われない)

ただし、この変換表は特定の範囲の文字コードにしか適用されませんので、
変換表どおりに変換されないかもしれません。
(拡張文字以外は変換表ではなく、文字コードの計算で実行されます。)
うまく変換できない場合、同ディレクトリにあるeuc_jp_and_sjis.cのsjis2mic関数
や
mic2sjis関数の変更が必要で、大変だと思います。

--- 小川 淳 (a_ogawa @ hi-ho.ne.jp)




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