• 締切済み

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に直せてないのか・・・初心者知識でいろいろ考えましたが、どうにもならなくて。  きちんと伝えられてるか心配ですが、どうかよろしくお願いいたします。

  • CGI
  • 回答数3
  • ありがとう数1

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

>配布サイト様からダウンロードしたものを、#!/usr/bin/perl に変えただけで、UPしたのですが、500サーバーエラーが返されるんです。なので、文字コードをeucに変えたんですけれどだめなんですよね。 アスキーモードでのftp転送ではなく、サーバーの端末へ直接持っていって、ファイルコピーしたのなら、改行コードはそのままなので、サーバーエラーになりますね。 なぜなら、1行目の最後にCRというunixサーバーには理解出来ないコードがあるから、perlすら実行出来ないのです。 eucに変えても、改行コードがwin用CR+LFのままなら、やはりサーバーエラーが出るはずですけど、 書き込みが出来て文字化けすると云うことは、文字コードを変えた時に、改行コードも変えてくれるエディターなのでしょうか? そのエディターは、文字コードはShift_JISで改行コードのみunix用LFで保存出来ないのでしょうか? 「メモ帳++」は使ったことがないので。ちょっと疑問に思った次第です。 >取り敢えず、FTPで送れるようにサーバーを変えてみます。ルーター内で出来ると思うので、まずそれをやってみて、アスキーモードで転送してみます。 今後のことを考えるとそれがよいと思いますよ。

kaisyan
質問者

補足

 解答ありがとうございます。返事が遅くなり申し訳ないです。 >書き込みが出来て文字化けすると云うことは、文字コードを変えた時に、改行コードも変えてくれるエディターなのでしょうか? と、ありますが、その通り文字コードと改行コードを変えてくれるんですけれど、今ふと思ったのが、shift_jis/CRの物をEUC/LFにちゃんと変えられるのかどうかが疑問に^^;CGIを書く上で、EUC/LFで保存したほうがいいという風になっているので、編集などでそのようになるのか疑問に・・・ >そのエディターは、文字コードはShift_JISで改行コードのみunix用LFで保存出来ないのでしょうか?  これは、shift_jis/CR+LFというのは出来るのですがそれでも大丈夫なのでしょうか。とはいえ、上で書いたように、編集できちんとそうなるのかの問題がありますけれど^^;  どうもありがとうございました。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

>『shift_jisで書かれたプログラムのこういうところを直すといい』 チェックポイントはNo1のfeiningerさんのご回答にだいたい網羅されていると思います。 具体的なコードを知りたいのなら現在のソースのポイントとなるところを提示してくだされば、それぞれの細かい対応法などもレスが付くと思います。 perlの場合、同じことをするにもいろんな記述ができますので。 ところで、unixサーバーでも、改行コードがunix用にLFに変換されていれば(アスキーモード転送していれば)、 文字コードは(コメントや変数内の文字列設定部分、データファイル)はShift_JISのままでも、perlが直接それをコード解釈するわけではないので、動作するのがふつうですけど。 大概のサーバーはunix系だけど、大概の配布perlスクリプトはShift_JISなのはそのためです。 一部の文字は、文字化け対策で、後ろに\が必要とか、正規表現では格別の対応が必要とかありますけど。 元がShift_JISで書かれていたのなら対応済みのはずですし。 お使いのサーバーは、全くShift_JISを受け付けないのでしょうか?

kaisyan
質問者

補足

返答ありがとうございます。 >unixサーバーでも、改行コードがunix用にLFに変換されていれば(アスキーモード転送していれば)、 文字コードは(コメントや変数内の文字列設定部分、データファイル)はShift_JISのままでも、perlが直接それをコード解釈するわけではないので、動作するのがふつうですけど。 ↑ですが、転送ではなく、CDに焼いてそれを貼り付けしてるんです。FTPの設定の仕方がいまいちわかってなくて・・・焼くとはいえ、WINXPなんですが、マインコンピューターにある、CDに送って、そのまま焼いてるんです。付属のソフトがあるようなんですが、簡単なので^^;もしかしたらそれがいけないのでしょうか・・・ >お使いのサーバーは、全くShift_JISを受け付けないのでしょうか? ↑は、配布サイト様からダウンロードしたものを、#!/usr/bin/perl に変えただけで、UPしたのですが、500サーバーエラーが返されるんです。なので、文字コードをeucに変えたんですけれどだめなんですよね。  取り敢えず、FTPで送れるようにサーバーを変えてみます。ルーター内で出来ると思うので、まずそれをやってみて、アスキーモードで転送してみます。  どうもありがとうございました。

  • feininger
  • ベストアンサー率41% (74/180)
回答No.1

元ソースの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してくれますから。

kaisyan
質問者

お礼

返答ありがとうございます。  なるほど・・・ということは、プログラムから変えないといけなくなるわけですね。単純に、jcodeをはずしてしまえば解決・・・にはならない、ですよね?^^; >せっかくEUCで送られてきたデータをjcodeでShift_JISへ変換してしまっているからじゃないかな?  と、言うご意見でしたので、ソースにjcodeを指定している部分を外して見たりいろいろとやってみたいと思います。CGIを基本から勉強ということにもなるかとは思いますけれど、がんばってみます。

kaisyan
質問者

補足

 他にも手があるかもしれませんので、まだまだご意見募集中です。  『shift_jisで書かれたプログラムのこういうところを直すといい』  など、ご教授頂ければ幸いです。

関連するQ&A

  • cgiスクリプトの文字化け

    既存のCGIライブラリ(cgi-lib.plとjcode.pl)を用いて、登録フォームを作りました。しかし、「入力」を押して、CGIを作用させると、文字化けがおこってしまいます。 cgiのなかで、文字コードをeucに変換しています。(jcode::convert機能)サーバーのCGI設定は全て確認しましたし、パーミッションも確認しています。文法などはあってると思いますし、ディレクトリ、文字コード(euc)・改行コード(LF)も確認しています。 他に原因があると思うのですが、回答よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • 文字コード変更による、文字化け・レイアウト崩れ

    文字コードをShift-jisからEUC-JPに変更したいのですが、 HTML・CSSに処理を施したら文字・レイアウトが大幅に崩れてしまいました。 以下のように変更したのですがやり方に間違いはないでしょうか? [HTML] <meta http-equiv="Content-Type" content="text/html; charset=Shift-jis"> ↓↓ <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> [CSS] @charset "shift_jis"; ↓↓ @charset "euc-jp"; また、ブラウザの表示⇒エンコードで(Shift_jis)を選択すると今までどおり正常に表示されます。(HTMLとCSSにはeuc-jpの記述にも関わらずです) これは文字コード変更したと思い込んでしまっているのでしょうか? 解決策お願いします。 あまり知識がありませんので、分かり易く教えていただけるとありがたいです。 ちなみにエディタはHTML Project2を使用しています。

  • 機種依存文字の文字コード変換

    現在、Shift-JISでCGIを作成しています。言語はPerlです。HTMLファイルから送信された文字をDBに登録するのですが、CGIをShift-JISで作成しているのに、DBがEUCとなっているため、jcode.plを利用して文字コードを変換しています。 しかし、文字が機種依存文字である場合、jcode.plでは文字コード変換ができないようで文字化けを起こした文字をDBに登録しようとしてエラーを起こしてしまいます。 何とか機種依存文字をコード変換したいのですが、可能でしょうか?

    • ベストアンサー
    • Perl
  • 文字コードsjisをUTF8に書き換えたい

    CGIの勉強中の者です。 文字コードはSJISで保存しているCGIをUTF8コードに換えるには何が必要でしょうか? HTMLならmeta内をSJISからUTF8に変更し、TeraPadなどのテキストエディタでUTF8に保存すればオッケーなんですが。 CGIの場合はHTMLと違って、換えるには複雑なのでしょうか? CGIプログラムの中では以下の「sjis」を「UTF8」に書き換えし、UTF8で保存しましたけど、文字化けが出てます。 <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; 宜しくお願いします。

    • 締切済み
    • CGI
  • メールを文字化けしないようにしたい

    次のようにメールを送信しようとしています。 Fedora CoreはUTF-8なので、jcode.plでJISに変換しようとしています。 require "jcode.pl"; $subject = "テストメール"; $data = "これはテストメールです。"; &jcode::convert(\$subject,'jis'); &jcode::convert(\$data,'jis'); @str = "subject:$subject\n\n"); push (@str, "$data\n.\n"); これがなぜかうまくいきません。メーラーの文字コードをutf8にすると正常に表示されます。 使い方が違うのかと思ったので、次のように変えてみたところ、エラーになりました。 &jcode::convert(\$subject,'utf8','jis'); また、先頭にuse utf8;を付けてみたところ、送信できたものの文字化けが余計ひどくなりました。 インターネットで検索したり本を読んでみたりしても、よくわかりませんでした。 どうやったらJISに変換できるのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 文字化け

    登録フォームを作成し、入力した内容でDBに追加を行うなかで、PHPmyadminで実際に見てみると文字化けしています。 レンタルサーバ(OS:linux) (1)登録フォーム(shift_jis) ↓各値を渡す (2)確認ページ(shift_jis) ↓各値をmb_convert_encoding(shift_jisに変更) (3)追加 すると文字化けします。 以前、cgi-lib.plを用いてperlで書いていたものは、 文字化けしていません。 どこがおかしいのでしょうか? ちなみに (1)登録フォーム(euc-jp) ↓各値を渡す (2)確認ページ(euc-jp) ↓各値をmb_convert_encoding(euc-jpに変更) (3)追加 としても文字化けしています。 (DBだけでなく、ページ全体も)

    • ベストアンサー
    • PHP
  • メールフォームで文字化けが出る

    http://okwave.jp/qa5038084.htmlの引き続きです。(メールフォーム) <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; ↓ sjis関連をutf8に書き換え、jcodeの頭文字をJに書き換え <meta http-equiv="Content-Type" content="text/html;charset=utf8"> &Jcode'h2z_utf8(*contenido) &Jcode'convert(*subject,'utf8'); &Jcode'convert(*infor,'utf8'); &Jcode'convert(*contenido,'utf8'); &Jcode'convert(*res_msg,'utf8'); print "Content-type: text/html;charset=shift_utf8\n\n"; require 'jcode.pl'をuse Jcode;に書き換え ※jcode::" となっている箇所はありません 結果 メールフォームはエラーや文字化けは出なくて成功しましたが、メール受信の際、ThunderbirdPortableメーラーでは全て文字化け(文字エンコーディングは「日本語ISO-2022jp」となっています)、ウェブメールのgmailでは内容は文字化けになっていませんが、タイトルが文字化けになっています。 どこが悪かったのでしょうか? 宜しくお願いします。

    • 締切済み
    • CGI
  • EUC-JP-LINUXの文字化け

    文字化けで困っているのですが,通常有名なエンコードをしても直りませんでした。 それで String enc = System.getProperty("file.encoding"); で表示させたら EUC-JP-LINUX とでましたが、この時の strPar = new String(strPar.getBytes("ISO-8859-1"),"Shift_JIS"); はどうしたらよいのでしょうか? ちなみに画面は contentType = "text/html;charset=Windows-31J" としています。

  • 中国語のためのアンケートフォームCGIを作りたい

    perlを使って中国語のアンケートフォームCGIを作ろうと思っています。 日本語のアンケートフォームを作る場合には、 クライアントから送られてきたデータをCGIでうけとり、 jcode.plを使い、文字コードがSHIFT-JIS,EUC-JP,JISのうち どれで送られてきているか判別し、任意の文字コードに変換し、 データベースに保存するなり、メールを送るなりすることができます。 中国語用のアンケートフォームCGIを作る場合にも、 文字コードの変換が必要になるのかどうかが問題です。 まず中国語には何種類の文字コードがあるのか? 簡体字中国語に限って言えば、「GB2312」 しか存在しないのでしょうか? もしそれ以外のものが存在するとすれば、 jcode.plならぬccode.plのようなものが必要になるはずです。 そういうものが存在するとすれば、どこで手に入れられるか お教えいただければありがたいです。 また「big5」というのは別言語と考えていいのでしょうか。 一般的に中国では「GB2312」と「big5」はどのように使い分けられているのでしょうか。

    • 締切済み
    • CGI
  • メール送信後のHTMLが文字化けします

    FORMからsendmailを利用してメールを送信し、その結果を「送信できた」、「未入力項目がある」などを出力するHTMLとして出力するcgiを作ったのですがHTML出力が文字化けします。 メールのsubjectやbodyは文字化けせず正常に送信できます。HTMLにはMETAタグでeuc-jpやshift_jisと色々とトライしました。cgiもshift_jisとeuc-jp両方で試しましたがどちらも文字化けします。文字化けしているときにブラウザのエンコードで自動選択すると、ブラウザがcgiの使用コードに自動的に合わせてくれて正常に表示してくれますがこれがcgiを起動するたびで面倒です。エンコードを自動選択しないと文字化けしてそのときのブラウザが選択している文字コードは「西ヨーロッパ言語(ISO)です。 どうしたらブラウザに使用している文字コードを認識させるられるでしょうか?

    • ベストアンサー
    • CGI