Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

文字化けとパスワード変更

perlでCGIを作っています。入力フォームで文字を入力すると、text.dataでは文字化けしています。CGI上の文字は大丈夫なのですが・・。どのように対処すればいいでしょうか? あと、if構文を試していたら、正解を書いても、パスワードを変えても対応せずに間違いだという画面しか出ません。必要があればプログラムも載せます。考えれることを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • cocky
  • ベストアンサー率57% (232/402)
回答No.7

秀丸の自動判別について補足です。 秀丸に限らず、基本的にエディタの「自動判別」はファイルの先頭部のデータの漢字コードを見て判別を行っているので、ファイルの先頭部にShiftJISのデータが入っていて、その後にEUCのデータが続くようなケースでは、エディタは漢字コードをShiftJISとして判断してしまうので、EUCの部分は文字化けして表示されます。 一度data.textのファイルを抹消してみて、ファイルサイズ0の状態でCGIを実行させるとどうなりますか?

koujin
質問者

お礼

ありがとうございました。一度data.textのファイルを抹消したところ、無事文字化けせずにできました。また、if構文はif2に名前を変更して、もう一度EUCで保存しなおしたところ、きちんと作動しました。 何度も教えてもらい本当にお世話になりました。ありがとうございました。またよろしくお願いします(笑)

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • cocky
  • ベストアンサー率57% (232/402)
回答No.6

スクリプトのencodingについてはdanyさんの書かれている通りです。 秀丸は使ってないので(私はDana派)詳細はわかりませんが、秀丸に限らず一般的なWindowsのエディタであれば標準の漢字コードはShiftJISになるので、EUCで処理したければnkfなどの漢字コード変換ツールを使う必要があります。 あるいは秀丸に漢字コードの変換機能があればそれを使うのも手でしょう。 ところで、出力されたdata.textを秀丸で開いた場合はどうなのでしょうか? 自動判別がonになっているのであれば、文字化けはしないと思うんですが…。

すると、全ての回答が全文表示されます。
  • dany
  • ベストアンサー率35% (27/77)
回答No.5

Windows上で扱う基本的な文字コードはshift-jis(sjis)です。 だから新規でテキストを作った場合などは何もしなければ sjisで保存されます。 セーブする時文字コードの指定とかできるんじゃないですか? 「自動判別」というのは読み込むファイルの文字コードを判別 する機能です。秀丸は使っていないので詳しいことは不明ですが、 offの状態でeucやjisのファイルを読ませると化けたりするのでは。 私が使っているWZ Editorでは[ファイル]-[文書の情報]で文字 コードを確認することができます。秀丸にも似たような機能が あるのではないかと。 IEにテキストを読ませて、[表示]-[エンコード]で調べてみるのも いいかも。違うコードなら化けます。

koujin
質問者

お礼

本当に何度もありがとうございました。 一度、cockyさんに言われたとおり、textファイルを抹消したところ、無事文字化けせずにみれました。 やはり、sjisで書かれていたようでした。if構文のほうはif2に名前を変えてEUCで保存しなおしたところうまく作動しました。まだまだわからないことが多いですが、今回は本当に何度も教えてもらい感謝しています。ありがとうございました。またよろしくお願いします(笑)

すると、全ての回答が全文表示されます。
  • dany
  • ベストアンサー率35% (27/77)
回答No.4

cockyさんと同様、スクリプトがsjisで書かれているような気がします。 エディタは何を使ってますか? eucの「ゆず」とsjisの「ゆず」はコードが違うからif は真に なりません。

koujin
質問者

補足

お返事ありがとうございます。 エディタは秀丸を使っています。 cockyさんの補足にも書いたのですが、秀丸で自動判別にしてあるので、EUCで書かれているのだと思っていたのですが・・? 初心者すぎる質問で恥ずかしいのですが、スクリプトを確認するにはどうすればいいですか? やっと、お二人の言いたいことが分かり始めたました(^^;たびたびすみませんがよろしくお願いします。

すると、全ての回答が全文表示されます。
  • cocky
  • ベストアンサー率57% (232/402)
回答No.3

スクリプト自体の漢字コードは何で書かれてますか? あと、出力結果のファイルの内容は何で確認しましたか? スクリプトがShiftJISで書かれているのに漢字コードをEUCに変換したら、同じ文字でもコード体系が異なるためにif文でデータが一致しないのは当然だと思います。 またEUCで出力されたファイルをダウンロードしてメモ帳などで開いても、Windowsのメモ帳はShiftJISコードのテキストでないと文字化けしますから、それは文字化けするように見えてしまいますよね。 大事なのはdanyさんも書かれているように「文字コードを一つに統一する」ことなので、その点に注意してやり直してみて下さい。 プログラムそのものは文法的におかしいところはなさそうなので。

koujin
質問者

補足

迅速なお返事ありがとうございます。 すごく恥ずかしいのですが、漢字コードを何で書いてあるかという質問について、よくわからないのですが、とりあえず、秀丸で書いてて、文字コードを自動判別するようにしてあり、そのままプログラムを書いています。のでEUCになっているものだと思っているのですが・・? また、出力結果のファイルの内容はやはり、秀丸で開いています。

すると、全ての回答が全文表示されます。
  • dany
  • ベストアンサー率35% (27/77)
回答No.2

あー、質問がよくわからないのですが、 「text.dataでは文字化けします。CGI上の文字は大丈夫なのですが」 というのは、 「ブラウザに表示されたフォームに文字を入力している時点では  化けていないのに、フォームデコードしたものになにがしかの処理を  加えると化けてしまう」 という意味でしょうか? cockyさんが書いているように、入力画面、 スクリプト内で文字コードを統一しないといけません。 また、shift-jisで書かれたスクリプトの中で「横浜」とか書くと 化けます。一番簡単なのはすべてEUCで統一することですかね。 ifに関しては、これだけの情報ではサッパリです。^^;

koujin
質問者

補足

ありがとうございました。下記に補足します。 このように書いたのですが、かなが文字化けしており、 英数は文字化けしません。一応、文字コードは指定してあるはずですが、これではいけませんか? require 'cgi-lib.pl'; &ReadParse(*answer); $data="$answer{'text1'},$answer{'select'},$answer{'text2'}"; require 'jcode.pl'; &jcode'convert(*data,'euc');$jikan = localtime(time()); open (ANSWER, ">>data.text"); print ANSWER "$jikan,$data\n"; close (ANSWER); また、if構文ですが、長くなりますが、やはり全部載せます(^^;。すみませんが、また教えてください。 #!/usr/local/bin/perl require 'cgi-lib.pl'; &ReadParse(*answer); $data = $answer{'text1'}; require 'jcode.pl'; &jcode'convert(*data,'euc'); print "Content-type:text/html\n\n"; if ($data eq "ゆず") { print <<EOF; <html> <head><title>当たり!</title></head> <body> <font size="4"> 正解です。 </font> <a href="index.html">ここ</a>をクリックしてください。 </font> <br><br> EOF } else { print <<EOF; <html> <head><title>はずれ!</title></head> <body> <font size="4"> はずれです。 <a href="JavaScript:history.back()">もう一度入力してください。</a> </font> <br><br> EOF } print <<EOF; </body> </html> EOF exit;

すると、全ての回答が全文表示されます。
  • cocky
  • ベストアンサー率57% (232/402)
回答No.1

漢字コードの変換はきちんと行っていますか? CGIで入力されるデータの漢字コードは一定ではありませんから、CGIの最初のところでjcode.pl等を使って漢字コードをきちんと変換してやらないと、そりゃ文字化けして当たり前です。

koujin
質問者

補足

ありがとうございます。一応、jcode.plを使ってはいるのですが・・。danyさんの補足に詳しく書きましたのでよろしければ、教えてください。ちなみにjcode.plは自分で書いていないので(あるのを拝借した)こっちに問題がある場合は特に詳しく教えてください。分かりにくい質問ですみません(^^;

すると、全ての回答が全文表示されます。

関連するQ&A