- 締切済み
linuxサーバーにUPしたCGIにネット上でwinからカキコすると文字化け
まず、サーバー環境ですが、 OS=Fedora core1を使っています。 プログラムはメモ帳++にて、保存コードをshift_jisからEUCにし、charsetをEUCにしてます。jcode.plも入っています。 過去ログで、 http://okweb.jp/kotaeru.php3?q=565241 と同じような状況なのですが、求める答えはなくて、新たに書き込みました。 CGIのアドレスは http://www.sinjyou.info/cgi-bin/cbbs/cbbs.cgi です。ためしに書き込みをしてあるのですが、文字化けで--; 一応jcodeも最新版を入れてみたりと試行錯誤はしてみたのですが・・・ これは書き込みをしたときにそのパソコンの文字コードごと保存してしまってて、プログラムはEUCで吐き出すからそれが原因かな?とか、shift_jisにブラウザのエンコードを直すときちんと表示されるので、その書き込みをする所(というかプログラム?)の文字コードがEUCに直せてないのか・・・初心者知識でいろいろ考えましたが、どうにもならなくて。 きちんと伝えられてるか心配ですが、どうかよろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hrm_mmm
- ベストアンサー率63% (292/459)
>配布サイト様からダウンロードしたものを、#!/usr/bin/perl に変えただけで、UPしたのですが、500サーバーエラーが返されるんです。なので、文字コードをeucに変えたんですけれどだめなんですよね。 アスキーモードでのftp転送ではなく、サーバーの端末へ直接持っていって、ファイルコピーしたのなら、改行コードはそのままなので、サーバーエラーになりますね。 なぜなら、1行目の最後にCRというunixサーバーには理解出来ないコードがあるから、perlすら実行出来ないのです。 eucに変えても、改行コードがwin用CR+LFのままなら、やはりサーバーエラーが出るはずですけど、 書き込みが出来て文字化けすると云うことは、文字コードを変えた時に、改行コードも変えてくれるエディターなのでしょうか? そのエディターは、文字コードはShift_JISで改行コードのみunix用LFで保存出来ないのでしょうか? 「メモ帳++」は使ったことがないので。ちょっと疑問に思った次第です。 >取り敢えず、FTPで送れるようにサーバーを変えてみます。ルーター内で出来ると思うので、まずそれをやってみて、アスキーモードで転送してみます。 今後のことを考えるとそれがよいと思いますよ。
- hrm_mmm
- ベストアンサー率63% (292/459)
>『shift_jisで書かれたプログラムのこういうところを直すといい』 チェックポイントはNo1のfeiningerさんのご回答にだいたい網羅されていると思います。 具体的なコードを知りたいのなら現在のソースのポイントとなるところを提示してくだされば、それぞれの細かい対応法などもレスが付くと思います。 perlの場合、同じことをするにもいろんな記述ができますので。 ところで、unixサーバーでも、改行コードがunix用にLFに変換されていれば(アスキーモード転送していれば)、 文字コードは(コメントや変数内の文字列設定部分、データファイル)はShift_JISのままでも、perlが直接それをコード解釈するわけではないので、動作するのがふつうですけど。 大概のサーバーはunix系だけど、大概の配布perlスクリプトはShift_JISなのはそのためです。 一部の文字は、文字化け対策で、後ろに\が必要とか、正規表現では格別の対応が必要とかありますけど。 元がShift_JISで書かれていたのなら対応済みのはずですし。 お使いのサーバーは、全くShift_JISを受け付けないのでしょうか?
補足
返答ありがとうございます。 >unixサーバーでも、改行コードがunix用にLFに変換されていれば(アスキーモード転送していれば)、 文字コードは(コメントや変数内の文字列設定部分、データファイル)はShift_JISのままでも、perlが直接それをコード解釈するわけではないので、動作するのがふつうですけど。 ↑ですが、転送ではなく、CDに焼いてそれを貼り付けしてるんです。FTPの設定の仕方がいまいちわかってなくて・・・焼くとはいえ、WINXPなんですが、マインコンピューターにある、CDに送って、そのまま焼いてるんです。付属のソフトがあるようなんですが、簡単なので^^;もしかしたらそれがいけないのでしょうか・・・ >お使いのサーバーは、全くShift_JISを受け付けないのでしょうか? ↑は、配布サイト様からダウンロードしたものを、#!/usr/bin/perl に変えただけで、UPしたのですが、500サーバーエラーが返されるんです。なので、文字コードをeucに変えたんですけれどだめなんですよね。 取り敢えず、FTPで送れるようにサーバーを変えてみます。ルーター内で出来ると思うので、まずそれをやってみて、アスキーモードで転送してみます。 どうもありがとうございました。
- feininger
- ベストアンサー率41% (74/180)
元ソースのCGIはShift_JISを前提として作られたものだったのですよね? それをEUC化したいのですよね? ソースの文字コードをEUCへ変換。charsetの"Shift_JIS"部分を"EUC-JP"に改造。 これだけではまだ不十分ですよ。元ソースにjcodeが使われていた場合は特に。 jcodeでどのような文字変換を行っているのかを理解したり、 Shift_JIS用の正規表現が使われているところはEUC化したり、 Shift_JISを前提として文字列を直接処理している部分(char単位で操作しているロジックとか)があればEUC化したり。結構大変です。 文字化けの原因は、 せっかくEUCで送られてきたデータをjcodeでShift_JISへ変換してしまっているからじゃないかな? 今時のブラウザであればSJISサイトにはSJISを。EUCサイトにはEUCでPOSTしてくれますから。
お礼
返答ありがとうございます。 なるほど・・・ということは、プログラムから変えないといけなくなるわけですね。単純に、jcodeをはずしてしまえば解決・・・にはならない、ですよね?^^; >せっかくEUCで送られてきたデータをjcodeでShift_JISへ変換してしまっているからじゃないかな? と、言うご意見でしたので、ソースにjcodeを指定している部分を外して見たりいろいろとやってみたいと思います。CGIを基本から勉強ということにもなるかとは思いますけれど、がんばってみます。
補足
他にも手があるかもしれませんので、まだまだご意見募集中です。 『shift_jisで書かれたプログラムのこういうところを直すといい』 など、ご教授頂ければ幸いです。
補足
解答ありがとうございます。返事が遅くなり申し訳ないです。 >書き込みが出来て文字化けすると云うことは、文字コードを変えた時に、改行コードも変えてくれるエディターなのでしょうか? と、ありますが、その通り文字コードと改行コードを変えてくれるんですけれど、今ふと思ったのが、shift_jis/CRの物をEUC/LFにちゃんと変えられるのかどうかが疑問に^^;CGIを書く上で、EUC/LFで保存したほうがいいという風になっているので、編集などでそのようになるのか疑問に・・・ >そのエディターは、文字コードはShift_JISで改行コードのみunix用LFで保存出来ないのでしょうか? これは、shift_jis/CR+LFというのは出来るのですがそれでも大丈夫なのでしょうか。とはいえ、上で書いたように、編集できちんとそうなるのかの問題がありますけれど^^; どうもありがとうございました。