dポイントプレゼントキャンペーン実施中!

環境はxp、apache2、php5、Postgresql8.2です。
1台のPCをサーバ&クライアントにしています。
ただ今PHPとPostgresqlの勉強をしています。

文字化けをしてしまい困っています。

Excelデータからcsvに落として、
それをpostgresのテーブルに書き込みました。
ここまでは上手く行きました。

ところが、良く確認してみると
ハシゴの「髙」(高)や「﨑」(崎)「祥」などの文字が
「?」に置き換わってしまいます。

これをPHPで表示されてても同じです。

ご教示して頂けたら幸いです。

A 回答 (4件)

ぽすぐれ ML過去ログ


http://ml.postgresql.jp/pipermail/pgsql-jp/2005- …

EUCであればこれがビンゴかな。
EUCにも二種類あり、それぞれ特殊文字の扱いが違います。
// PostgreSQLの文字コードはeucJP-openなんですね・・・
// 当然といえば当然だが・・・
MLログにもあるように諦めるしかない気がします。

解決策としては「EUC-JPを使わない」となります。
PostgreSQLの内部コードをsjisにするか、
CSVファイルをUTF-8に変換しPostgreSQLの内部コードをUTF-8に変えた上で入れ込むしか策はないかも。
    • good
    • 0
この回答へのお礼

ご返事が遅れましてすいません。

$line[0] = mb_convert_encoding($line[0],"eucJP-win","sjis-win");
で解決致しました。

お礼日時:2007/12/17 13:17

$line[0] = mb_convert_encoding($line[0],"EUC-JP","sjis-win");



$line[0] = mb_convert_encoding($line[0],"CP51932","sjis-win");
にしたらどうでしょう
PHPのバージョンが低いと使えませんが
    • good
    • 0
この回答へのお礼

ご返事が遅れましてすいません。
PHPのバージョンが低いようで
使えませんでした。

お礼日時:2007/12/17 13:19

問題の切り分けをしましょう。


Excel→CSVの過程で崩れたのか、CSV→(PHP)→PostgreSqlで崩れたのか判断できません。

予測ですが、excel(sjis)->csv(sjis)->postgre(euc?utf8?)としていて
マッピングに失敗しているのではいかと思います。
(機種依存文字、正確にはIBM拡張?はutf8変換で暗黙的に扱ってくれなかった記憶があります)

投入するcsvをDBに合わせるか、DBをCSVに合わせるかするといけるかもしれません。

この回答への補足

ご返事有り難うございました。

>Excel→CSVの過程で崩れたのか、CSV→(PHP)→PostgreSqlで崩れたのか判断できません。
CSV→(PHP)→PostgreSqlで崩れました。

>投入するcsvをDBに合わせるか、DBをCSVに合わせるかするといけるかもしれません。
のところが少し分からないのですが・・・。

最初は、postgresのテーブルに書き込むと
全て文字化けをしていました。

そこでエンコーディングを変換して書き込むと
大方のデータを書き込むことが出来ました。
$line[0] = mb_convert_encoding($line[0],"EUC-JP","sjis-win");

ところが、質問をしましたように
ハシゴの「高」が「?」に置き換わってしまいました。

>(機種依存文字、正確にはIBM拡張?はutf8変換で暗黙的に扱ってくれなかった記憶があります)
と、ご教示して頂いたので、見当違いかも知れませんが

$line[0] = mb_convert_encoding($line[0],"utf8","sjis-win");

と、試してみましたがエラーになりました。

ご教示して頂けたら幸いです。

補足日時:2007/12/11 17:01
    • good
    • 0

文字コードによっては表示すべきコードが無いので表示できません。


EUCだとダメなはず。SJISならば大丈夫だったような・・・
PHP側で EUC-win や SJIS-win の文字コード指定をすれば使用できるはず。
SQLは別の処理が必要かもしれない。(postgresは使ったことが無いので分かりません)
    • good
    • 0
この回答へのお礼

ご返事有り難うございました。
大変に参考になりました。

お礼日時:2007/12/11 17:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!