From: "U.Nakamura" Date: 2007-02-09T00:41:30+09:00 Subject: [ruby-list:43171] Re: CGIで受け取ったデータをファイルに書き込む際のエラー こんにちは、なかむら(う)です。 In message "[ruby-list:43169] Re: CGIで受け取ったデータをファイルに書き込む際のエラー" on Feb.09,2007 00:29:23, wrote: | BBSを携帯電話でも見られるようにしたいので、 | 内部の処理はEUC、出力はSJISに変換しているのですが、 | そのあたりが問題なのでしょうか。 bbsdata/*.txt の中身はEUC-JPのつもりだということでいいんです よね? で、それを表示する際にどうやっているかによるんじゃないでしょ うか。 | > cgi = CGI.new | > messages = cgi["messages"] | > names = cgi["names"] | | の、messagesとnamesをアルファベットのみにすると、 | 文字化けはなくなり、正しい曜日が表示されます。 と、いうことは、messagesとnamesはいったいどのような文字エンコ ーディングで送られてきているのでしょうか? また、このスクリプトはどんな文字コードで書かれているのでしょ うか? 話の内容から想像するに、このCGIを呼び出す元になるHTMLはShift_JIS で書かれているのではないかと思います。 だとすると、普通のブラウザなら、messagesやnamesはShift_JISで 送ってきているのだろうと思います。 一方、このスクリプトはEUC-JPで書かれているのでしょう。 よって、 | wdays = ["日", "月", "火", "水", "木", "金", "土"] この各曜日の文字列はEUC-JPということになります。 それを後でくっつけてからKconv.toeucしてるので、期待と異なる余 計な変換が行われているのだろうと思います。 というわけで、以上の前提が正しいなら、 | f.write(Kconv.toeuc(messages + "," + names + "," + times) + "\n") を、例えば f.write(Kconv.toeuc(messages + "," + names) "," + times + "\n") とすれば、(完全じゃない可能性はありますが)ほぼ期待の出力が得 られるのではないでしょうか。 それでは。 -- U.Nakamura