機種依存文字として、俗に「はしご高」と呼ばれる文字を、
JDBC経由でPostgreSQLに格納し、その値をPHPプログラムから取得
したところ文字化けしてしまいました。
JDBC経由でJavaプログラムから取得する分には問題がありません
でした。
また、PHPから「はしご高」をPostgreSQLに格納し、JDBC経由で
Javaプログラムから取得したところ、空白文字になってしまいましたが、
PHPから取得すると正常に取得できました。
PostgreSQLのデータベースはEUC-JPで作成しております。
PHPのデフォルトエンコーディングはEUC-JPです。
PHPからDBに登録するときに変換されるEUC-JPとJDBC内で変換される
EUC-JPが異なるということがあるのでしょうか?
文字コードに関する知識が乏しく、なにから考えてよいのか手探りの
状態です。
できましたら、ご回答のほどよろしくお願いいたします。
| No.179 | 投稿日時: | 2004/07/15(木) 12:25 <↑親記事:No.175> |
| 投稿者: | 森山 将之 <E-Mail> |
EUCエンコーディングでのいわゆる機種依存文字の取り扱いは混乱していますので、機種依存文字を使うのであれば、極力 EUC を使うのは避けたほうがいいです。
JDBC に関しての知識が無いので、トンチンカンな事を行っているかもしれませんが、PostgreSQL の EUC_JP は eucJP-open(eucJP-ms) と等価なもとなっていますが、Java の EUC-JP は、機種依存文字拡張されていない通常の EUC-JP ですので、JDBC で文字コード変換できていないという可能性はあります。
あと、PHP で機種依存文字を使う場合、内部文字コードには eucJP-win か UTF-8、http 入出力では SJIS-win か UTF-8 を使うようにしなければならなかったと思います。PHPは以前、少しだけ触って、最近、使っていないので、ちょっと記憶があやふやですが。