[pgsql-jp: 39302] Re: 'encoding "EUC_JP" has no equivalent in "UTF8"' の理由

樋口佳之 VYX02237 @ nifty.com
2008年 3月 26日 (水) 10:05:25 JST


>> 下記は個人的なメモです。参考程度に。
> ----------------------------------------------------------
> [SJISからUTF8へ変換できないときの対応方法]
> 
> 1.
> src/backend/utils/mb/Unicodeにて
> sjis_to_utf8.mapにコードを追加
> utf8_to_sjis.mapにコードを追加
> 
> 2.
> src/backend/utils/mb/conversion_procs/utf8_and_sjisにて
> make clean
> make
> make install
> 
> 3.
> psqlで次を実行
> DROP CONVERSION pg_catalog.sjis_to_utf8;
> CREATE DEFAULT CONVERSION pg_catalog.sjis_to_utf8 FOR 'SJIS' TO 'UTF8' FROM sjis_to_utf8;
> DROP CONVERSION pg_catalog.utf8_to_sjis;
> CREATE DEFAULT CONVERSION pg_catalog.utf8_to_sjis FOR 'UTF8' TO 'SJIS' FROM utf8_to_sjis;
> 
> 4.
> 確認
> 
>
大いに参考になりました。ありがとうございます。
1から4の手順の断片的な話は読んでいましたが、
その度に、サーバー全体の再インストールが必要と勘違いしていまして、
試していませんでした。

私の場合、EUC_JPからUTF8への変換で試してみて、
EUC_JPからUTF8への変換は、うまくいきました。

だた、もう一度UTF8からEUC_JPへの変換を行うとダメな場合がありました。

1 両方の変換表に手を加えてうまくいった場合

euc_jp_to_utf8.map:  {0xfce2, 0xe9ab99},  /*はしごたか*/
utf8_to_euc_jp.map:  {0xe9ab99, 0xfce2}  /*はしごたか*/

euc_jp_to_utf8.map:  {0xf9f5, 0xefa891},  /*さき*/
utf8_to_euc_jp.map:  {0xefa891, 0xf9f5},  /*さき*/

2 utf8_to_euc_jp.mapに既に別の変換表があって、それでもうまくいった場合

euc_jp_to_utf8.map:  {0xfcce, 0xe897aa},  /*やぶ*/

3 utf8_to_euc_jp.mapに既に別の変換表があって、文字が変わった場合

euc_jp_to_utf8.map:  {0xf9ee, 0xe5afac},  /*かん*/
euc_jp_to_utf8.map:  {0xfacb, 0xe6a081},  /*やなぎ*/
euc_jp_to_utf8.map:  {0xfbad, 0xe790aa},  /*じ*/

試す前は、euc_jp_to_utf8.mapへの追加と、utf8_to_euc_jp.mapへの追加は
1対1でできると思っていたのですが。

2や3の場合は今のところよくわかりませんでした。

ただ、一度 EUC_JPからUTF8へ移行してしまえば、その逆を再び行うことは
私の中ではあまり考えられないのでこれでもいいかもと思いました。
2や3の場合も、windows上つまりSJISの中ではうまく見えているので。



樋口



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