- ベストアンサー
ハシゴの「高」が「?」に置き換わってしまいます。
環境はxp、apache2、php5、Postgresql8.2です。 1台のPCをサーバ&クライアントにしています。 ただ今PHPとPostgresqlの勉強をしています。 文字化けをしてしまい困っています。 Excelデータからcsvに落として、 それをpostgresのテーブルに書き込みました。 ここまでは上手く行きました。 ところが、良く確認してみると ハシゴの「髙」(高)や「﨑」(崎)「祥」などの文字が 「?」に置き換わってしまいます。 これをPHPで表示されてても同じです。 ご教示して頂けたら幸いです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ぽすぐれ ML過去ログ http://ml.postgresql.jp/pipermail/pgsql-jp/2005-April/018754.html EUCであればこれがビンゴかな。 EUCにも二種類あり、それぞれ特殊文字の扱いが違います。 // PostgreSQLの文字コードはeucJP-openなんですね・・・ // 当然といえば当然だが・・・ MLログにもあるように諦めるしかない気がします。 解決策としては「EUC-JPを使わない」となります。 PostgreSQLの内部コードをsjisにするか、 CSVファイルをUTF-8に変換しPostgreSQLの内部コードをUTF-8に変えた上で入れ込むしか策はないかも。
その他の回答 (3)
- php504
- ベストアンサー率42% (926/2160)
$line[0] = mb_convert_encoding($line[0],"EUC-JP","sjis-win"); を $line[0] = mb_convert_encoding($line[0],"CP51932","sjis-win"); にしたらどうでしょう PHPのバージョンが低いと使えませんが
お礼
ご返事が遅れましてすいません。 PHPのバージョンが低いようで 使えませんでした。
- wp_
- ベストアンサー率54% (132/242)
問題の切り分けをしましょう。 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"); と、試してみましたがエラーになりました。 ご教示して頂けたら幸いです。
- moon_night
- ベストアンサー率32% (598/1831)
文字コードによっては表示すべきコードが無いので表示できません。 EUCだとダメなはず。SJISならば大丈夫だったような・・・ PHP側で EUC-win や SJIS-win の文字コード指定をすれば使用できるはず。 SQLは別の処理が必要かもしれない。(postgresは使ったことが無いので分かりません)
お礼
ご返事有り難うございました。 大変に参考になりました。
お礼
ご返事が遅れましてすいません。 $line[0] = mb_convert_encoding($line[0],"eucJP-win","sjis-win"); で解決致しました。