[pgsql-jp: 37905] Re: EUC_JP を UTF8 に変換するには

Hiroki Kataoka kataoka @ interwiz.jp
2007年 1月 8日 (月) 13:58:39 JST


片岡です。

Morita Kazuro wrote:
> PostgreSQLの SJIS-EUC の変換で、ドコモの特殊文字はいまのところ
> うまく出来ているように見えます。

 ドコモの絵文字はSJISの外字領域を使っています。PostgreSQLのSJIS⇔EUC_JP
変換は外字領域に対応していますので、相互の変換が可能です。ところが
SJIS⇔UTF8変換は外字領域に対応していませんので、相互の変換ができません。

> ドコモが昔からある、単純な 
> SJIS-EUC 変換アルゴリズムでうまく行くようなところをドコモ特殊
> 文字のコードとして選んだのか、PostgreSQL の変換を実装した人が
> ドコモの特殊文字を意識して実装されたのか、あるいは偶然うまく
> 行っているだけなのか、私は知りませんが、数年前から使っておりま
> すが、今のところはうまく行っているように見えます。

 ドコモの絵文字は外字領域を使っているため、外字領域の変換ができるかどう
かがすべてです。蛇足ですが、SJIS⇔EUC_JP間の外字の変換は、昔からあるSJIS-
EUC変換アルゴリズムでは変換できません。意外と複雑です。

> PostgreSQLがバージョンアップされた時に
> 毎回パッチをあてなければならないのかな、今後、ドコモの特殊文
> 字の市民権が認められて、標準でPostgreSQLにドコモ文字のUTF8
> への変換が実装される事はないのかな? その時に、そのまま使え
> たらいいな、そのためには誰かがすでにやっている変換に合わせて
> おいた方がいいかな? と思ったんですけど。
> 
> でも、そんなものは存在しないということですか?

 UTF8(というかUNICODE)にも外字領域がありますので、SJIS外字領域とUTF8
の外字領域とを一対一に対応させる変換マップを追加してあげれば、PostgreSQL
上でSJIS⇔UTF8変換が可能になります。ただしUTF8の外字領域(6400文字以上)
の方がSJISの外字領域(1880文字)よりもはるかに広いので、UTF8側は外字領域
の先頭から1880文字のみをマッピング対象にします。

 SJIS外字:F040〜F9FC 1880文字
 UTF8外字:E000〜E757 1880文字

 さて、このマッピングならドコモの絵文字に限った話ではないので(外字利用
者全般の利便性につながるので)、PostgreSQLの変換テーブルに追加しても問題
ないように思いますが、いかがでしょう?>詳しい方

-- 
Hiroki Kataoka <kataoka @ interwiz.jp>



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