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

Morita Kazuro morita @ yuki.ad.jp
2007年 1月 6日 (土) 20:28:07 JST


森田です。お世話になっております。

> 気になるのですが…
> 
> 文字エンコーデングといったときに、EUC/SJIS/UTF8といった
> 符号化方式だけに気を取られて、文字集合・mappingの差異を
> 見逃していないでしょうか ?
> 
> 携帯で使われるSJISは、符号化方式こそSJISですが、文字集合
> はその範囲を逸脱しています。それを無理矢理PostgreSQLの変
> 換エンジンで形だけEUCに変換して保存したわけですから、まず
> 最初に登録時の逆変換をかけてデータベース内から元の文字列
> (バイト列)を取り出すのが近道だとおもいます。
> つまり俺様EUCの文字列ではなく
> 元の携帯版SJISの文字列をダンプするほうが、簡単です。

PostgreSQL が SJIS が使えないから -E EUC_JP を使っているだけ
で、ダンプするときは SJIS になっております。ですから、私の質
問のしかたがまずかったのですが、現時点ではダンプは SJIS なので
SJIS のダンプから UTF8 のデータベースに格納できればOKです。

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


> これをUTF8にするmappingはいろいろあるとおもいます。
> クライアントが一種類で、かならず同じ変換エンジンを通って
> データが出入りするのならどんな俺様mappingでも構いません。

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

でも、そんなものは存在しないということですか?


> ただ、最初に書かれていた「いろいろな事情」というのが
> クライアントOSやブラウザ毎に異なるmappingの差異まで
> 考慮した上でのものなのかどうか、再確認をお勧めします。

今のところはドコモの携帯だけなので、PGCLIENTENCODING は 
SJIS なので、すべてのドコモの特殊文字を入れてみて、それらを
取り出したときに、元通りのコードであることが確認できれば、
それでいいのだと思います。

いろいろな事情というのは、同じデータベースで他国語対応させ
たいからです。ドコモの特殊文字を使うのはドコモの携帯だけな
ので別のクライアントやブラウザを考慮する必要はないと思います。
ドコモ以外の機種で日本語以外が入ったとき、UTF8 なら 
PGCLIENTENCODING を変えるだけで済むのではないかと思った
のですが。普通なら、そういう場合は別のデータベースを立てるの
かもしれませんが、UTF8 なら1つのデータベースでできるのでは、
と思ったのです。




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