- 締切済み
特殊文字 '?' を出力したい
特殊文字 '?' を出力したい 特殊文字 '?' を出力したい DB(Postgres)文字コード:UTF-8にて保存されている'?'という特殊文字を 含んだ文字列をcsv出力しようとして NKF.nkf("-W",str) としようとしたところ、文字変換コードが上手くいかず 他の文字は問題なく表示されますが '?'が削除された状態で出力されてしまいます。 皆様、アドバイスの程お願い致します。 ========================================== 環境: ========================================== OS: CentOS5.4 Ruby: 1.8.6 Postgres:8.1.0 投稿日時 - 2010-09-28 16:22:21
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- salsberry
- ベストアンサー率69% (495/711)
>UTF-8にて保存されている'?'という特殊文字を 元は特殊文字だったのかもしれませんが、ここでは普通の疑問符(文字コード0x3F)として表示されています。元の文字のUTF8での文字コードを16進数で書いてください。 また、変換先の文字コードは何ですか? その特殊文字がUTF-8に含まれていても変換先の文字コードには含まれない文字ならば、変換できないのは当然なので。
- kanemoto_s
- ベストアンサー率45% (112/244)
No.1です。 他の文字列が表示されているので、出力エンコードの問題ではなさそうですね。 どうしてもうまくいかないなら、Postgre側で'?'を使わないコードに置換してからrubyで再置換すると言う荒業を使えばどうにかなりますが。
- kanemoto_s
- ベストアンサー率45% (112/244)
Postgres使ったことがないのですが、回答者がいないようなので。 まず、ruby側で p str を使って'?'が入力されているか確認してみてください。 入力されていれば、?を含む文字列が出力されるはずです。 入力されているのであれば、 $KCODE= 'SJIS' NKF.nkf("-Ws",str) $KCODE= 'EUC' NKF.nkf("-We",str) 等で、出力エンコードを目的のキャラクタセットに設定すると、出力できると思います。 '?'が入力されていないのであれば、接続の問題と思いますので、以下のサイトを参考にPostgres側でキャラクタセットの設定を行ってみてくさい。 http://www.postgresql.jp/document/pg813doc/html/multibyte.html Postgres側で設定を正しく行っているのに入力されない場合は、接続ドライバの問題と思いますので接続ドライバを書いて再質問すれば、誰か答えてくれるかも。