[pgsql-jp: 39276] Re: 機種依存文字によるPgAdminのエラー

ITAGAKI Takahiro itagaki.takahiro @ oss.ntt.co.jp
2008年 3月 4日 (火) 19:22:51 JST


板垣です。

utsumi <takashi @ pat.hi-ho.ne.jp> wrote:

> ブラウザ(WindowsXPのIE7)から機種依存文字の「はしごたか」を入力して、DB
> に保存、そのデータをブラウザで表示しても「はしごたか」が表示されます。
> 
> エラーメッセージは
> ERROR:  character 0xfce2 of encoding "EUC_JP" has no equivalent in "UTF8"
> です。

「はしごたか」は、sjis や eucjp では 2通りのコードが割り当てられているようです。
PostgreSQL は、このうち、eucjp fce2 の変換マッピングを持っていません。

 sjis | eucjp  | utf8
------+--------+--------
 eee0 | fce2   | e9ab99
 fbfc | 8ff4fb | e9ab99

◎ SELECT encode(convert(decode('eee0', 'hex'), 'sjis', 'utf8'), 'hex');
◎ SELECT encode(convert(decode('fbfc', 'hex'), 'sjis', 'utf8'), 'hex');
× SELECT encode(convert(decode('fce2', 'hex'), 'eucjp', 'utf8'), 'hex');
◎ SELECT encode(convert(decode('8ff4fb', 'hex'), 'eucjp', 'utf8'), 'hex');


eucjp を使うのならば、8ff4fb に変換して格納するのはいかがでしょう?
fce2 と 8ff4fb が混在し、期待通りの検索ができなくなることも避けられます。
ただ、全ての文字コードを UTF8 に統一するのが一番問題が少なそうではありますが。

また、CREATE CONVERTION を絡めれば、変換を自作して追加できるかと思います。
とはいえ、なぜデフォルトで fce2 を絡めた変換はサポートされていないのか
不思議です。追加すべきでない理由があるんでしょうか?

------------------------------------------------------------
板垣貴裕 <itagaki.takahiro @ oss.ntt.co.jp>





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