Jeditで漢字コードを変更したのですが・・・(Mac)

このQ&Aのポイント
  • Jedit4でネットから調べたCGIのソースをペーストして保存したところ、再度開くと漢字コードがシフトJISになってしまう問題について解決方法を教えてください。
  • Jedit4でペーストしたCGIのソースを保存した後、再度開くと漢字コードがシフトJISに変わる問題が発生します。解決策を教えてください。
  • Jedit4でネットで見つけたCGIのソースコードを保存したら、再度開くと漢字コードがシフトJISになってしまいます。どのように設定すれば解決できるでしょうか?
回答を見る
  • ベストアンサー

Jeditで漢字コードを変更したのですが・・・(Mac)

Jedit4にネットで調べたCGIのソースをペーストして、ファイル形式:Jeditテキストのみ、漢字コード:EUC、改行コード:LF(Unix)で保存しました。しかし、このファイルを再度開くと必ず漢字コードがシフトJISになってしまいます。EUCで保存できるものもあります。これはなぜなのでしょうか?ご存じの方教えてください。OSはMac OS 9.2を使用しています。ちなみにコピーしたソースは以下の通りです。よろしくお願い致します。 ------------------ここから #!/usr/bin/perl $acc=$ENV{"HTTP_ACCEPT"}; if($acc=~"wml"){ if($acc=~"hdml;version=3.0"){ print "Location: http://www.mysite.com/index.hdml\r\n\r\n";} } else{ print"Location:http://www.mysite.com/index.wml\r\n\r\n"; } } else{ print"Location:http://www.mysite.com/index.html\r\n\r\n"; } -----------------ここまで

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

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

  • ベストアンサー
  • MtHill
  • ベストアンサー率68% (17/25)
回答No.1

非アスキー文字 (半角英数字以外) が含まれていないので、ファイルを開く際に Shift_JIS として読み込んだのではないかと思います。 試しに、 # コメントです。 のように日本語を入れてみてはどうでしょうか。 保存する際の改行コードは FTP ソフトで転送するするなら特に意識しなくてもいいかもしれません。 詳細は下記 URL を参照してください。 http://www.rescue.ne.jp/cgi/crlf/

参考URL:
http://www.rescue.ne.jp/cgi/crlf/

その他の回答 (1)

  • MtHill
  • ベストアンサー率68% (17/25)
回答No.2

回答 No.1 の補足です。 ACSII コードには、< > " # = \ などの記号も含まれます。 質問にあるソースでは、} が一つ多いため、エラーになる可能性があります。 次のようにしてみてください。 ------------------ここから #!/usr/bin/perl $acc = $ENV{"HTTP_ACCEPT"}; if($acc =~ "wml"){ if($acc =~ "hdml;version=3.0"){ print "Location: http://www.mysite.com/index.hdml\r\n\r\n"; } else{ print"Location:http://www.mysite.com/index.wml\r\n\r\n"; } } else{ print"Location:http://www.mysite.com/index.html\r\n\r\n"; } -----------------ここまで

momo0618
質問者

お礼

都合によりお返事が大変遅くなりました。申し訳ありません。 丁寧なご回答本当にありがとうございました。大変たすかりました。

関連するQ&A

  • $strの漢字コードをEUCにするには

    どうしたらいいのでしょうか? 「とほほ」に以下のサンプルがありましたがそうしたら$strがEUCに成るのでしょうか? # $strの漢字コードをEUCにしておいて if ($str =~ /[\x80-\xff]/) { print "全角文字が含まれてます"; }

    • ベストアンサー
    • Perl
  • PC・携帯等のアクセス時の自動振り分けについて

    現在自身でホームページを所有・管理しているのですが、index.cgiにより振り分け設定をしています(厳密に言えば、2年くらい前に人にしてもらいました)。 ところが、PC・Docomo・auに関してはそれぞれのページに振り分けられるのですがsoftbankだけはPCのページに振り分けされてしまいます。 ちなみに当方のサーバー上にあるindex.cgiに書かれてる構文は以下の通りです。 #!/usr/bin/perl $ua = $ENV{'HTTP_USER_AGENT'}; if(index($ua, "DoCoMo")>=0) { print "Location: http://www.00000.com/i/index.htm\n\n"; } elsif(index($ua, "J-SKYWEB")>=0) { print "Location: http://www.00000.com/j/index.htm\n\n"; } elsif(index($ua, "KDDI")>=0) { print "Location: http://www.00000.com/ez/index.htm\n\n"; } else { print "Location: http://www.00000.com/index.html\n\n"; } exit; 図々しいお話かもしれませんが、この構文をご訂正して頂ける方もしくは素人向けのよきアドバイスを頂ける方よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • PHP4→5にアップグレードしたらコードが動きません。

    このコードを使うとエラーが出ます。PHP4の環境では問題なかったのですが、PHP5にしたとたんエラーが出てコードが動きません。このコードは指定のファイルをブラウザでダウンンロードできるスクリプトです。 プログラミング素人なのでどう直したらま動くようになりますか??? #!/usr/bin/perl -wT use CGI ':standard'; use CGI::Carp qw(fatalsToBrowser); my $files_location; my $ID; my @fileholder; $files_location = "/home/user/public_html/static/file"; $ID = param('ID'); if ($ID eq '') { print "Content-type: text/html\n\n"; print "You must specify a file to download."; } else { open(DLFILE, "<$files_location/$ID") || Error('open', 'file'); @fileholder = <DLFILE>; close (DLFILE) || Error ('close', 'file'); open (LOG, ">>//home/user/public_html/dl.log") || Error('open', 'file'); print LOG "$ID\n"; close (LOG); print "Content-Type:application/x-download\n"; print "Content-Disposition:attachment;filename=$ID\n\n"; print @fileholder } sub Error { print "Content-type: text/html\n\n"; print "The server can't $_[0] the $_[1]: $! \n"; exit; }

    • ベストアンサー
    • PHP
  • PHPによる端末振り分けについて

    宜しくお願いします。 現在は、PERLでPC・各携帯キャリアへの振り分けを行っております。ソースは・・・ #!/usr/bin/perl #index.cgi # #ジャンプ先の設定 # #iモード $imode = "http://www.****.jp/i/index.html"; #EZweb $ezweb = "http://www.****.jp/e/index.html"; #J-Sky $jsky = "http://www.****.jp/j/index.html"; #パソコン $pc = "http://www.****.jp/pc/index.html"; # #ブラウザ情報の取得 # $brwsr = $ENV{'HTTP_USER_AGENT'}; # #判別 # #iモードの判別 if ($brwsr =~ /DoCoMo/){ print "Location: $imode\n\n"; } #EZwebの判別 elsif ($brwsr =~ /UP.Browser/){ print "Location: $ezweb\n\n"; } #J-Skyの判別 elsif ($brwsr =~ /J-PHONE/){ print "Location: $jsky\n\n"; } #その他(パソコン) else { print "Location: $pc\n\n"; } exit; という形で自動振り分けをしておりますが、これと同じ機能をPHPで作るにはどうすれば良いでしょうか?

    • ベストアンサー
    • PHP
  • perlでの改行コードの置換

    perlで改行コードを置換したいのですが・・・ もとのファイルはS-JISコードでその中身をEUC(UNIXで使用するために)に変換します。ここまではOKなのですが、改行コードがうまく行きません。 改行コードをUNIXで使うためにLFだけにしようと思い、 $line =~ s/\r\n/\n/g; (これは\r\nで引っかからない) とか $line =~ s/\n/\x0A/g; とかにしてみたのですがうまく行きません。 どのようにすればよろしいでしょうか?

    • ベストアンサー
    • Perl
  • ケータイサイトの3社別自動振り分けをしたい!(再質問です)

    CGIやphpによるユーザーエージェントを判別するスクリプトを使用して各キャリア別に自動振り分けをしたいということで以前質問しました。親切な方から下記回答をいただいたんですが、それをどうやってサイトに組み込めばいいのかがプログラムの知識が初心者レベルなので分かりません。CGIの設置の仕方は色々なサイトを見よう見真似でやってみたのですが、実行したら403エラーのような表示が出てメインのURLにアクセスできなくなってしまいました。下記のスクリプトはHTMLにも記述する必要があるんでしょうか?試したのはスクリプトを.cgiというファイルで保存してそれをサーバーにアップしてパーミッションを755に設定しただけです。どなたか、詳しく説明していただける方助けてください。 ------------------------------- #!/usr/bin/perl #ユーザーエージェント取得 $uagent = $ENV{'HTTP_USER_AGENT'}; $ua = 99; $docomohtml = 'ドコモ用ページ'; $auhtml = 'au用ページ'; $vodauhtml = 'ボーダ用ページ'; $otherhtml = 'その他用ページ'; if( index($uagent,"DoCoMo") >= 0){ $ua = 0; } elsif( index($uagent,"UP.Browser") >= 0){ $ua = 1; } elsif( index($uagent,"Vodafone") >= 0){ $ua = 2; } else{ $ua = 3; } if( $ua == 0){ print "Location: $docomohtml\n\n"; } elsif( $ua == 1){ print "Location: $auhtml\n\n"; } elsif( $ua == 2){ print "Location: $vodahtml\n\n"; } else{ print "Location: $otherhtml\n\n"; } exit; -----------------------------------

    • ベストアンサー
    • CGI
  • perlで作ったcgiがIE6で西ヨーロッパ言語でエンコードされてしまうのをさけるには?

    お世話になります。 いつもIEで西ヨーロッパ言語が選択されるのですが、 EUCと判別されるにはどのようにすればよろしいでしょうか? 当方、sakuraエディタにてcgiファイルを作成し EUCで保存しています。 コードは以下のコードです。 #!C:/Perl/bin/perl print "Content-type: text/html\n\n"; print "<html>\n"; print "<head><title>hello</title></head>\n"; print "<body>こんにちわ。ようこそcgiの世界へ</body>\n"; print "</html>\n"; _END_

    • ベストアンサー
    • CGI
  • 文字列チェックの動作がおかしい・・・

    フォームのメールアドレスチェックで動作がおかしいです。 自分では、問題がないと思っているのですが、どこかおかしなところがあればご指摘ただければと思います。 動作確認を簡単にするために作ったソースは if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkk-kkkkk.com')) { print "NG1\n"; }else { print "OK1\n"; } if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkk-kkkkk.com')) { print "NG2\n"; }else { print "OK2\n"; } if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkkkkkkk.com')) { print "NG3\n"; }else { print "OK3\n"; } if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkkkkkkk.com')) { print "NG4\n"; }else { print "OK4\n"; } if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkk-kkkkk.com')) { print "NG5\n"; }else { print "OK5\n"; } if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkk-kkkkk.com')) { print "NG6\n"; }else { print "OK6\n"; } if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkkkkkkk.com')) { print "NG7\n"; }else { print "OK7\n"; } if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkkkkkkk.com')) { print "NG8\n"; }else { print "OK8\n"; } です。予想していた結果は、全てOKとなるはずだったのですが、予想に反して NG1 NG2 OK3 OK4 OK5 OK6 OK7 OK8 となり、マッチングパターン部分が「^[0-9a-zA-Z\_\.\-\@]+$」となっているときだけ、ハイフンが文字列に含まれていると、予想と違っています。 自分的には??なのですが・・・ どこがおかしいのか、ご指摘いただければと思います。 長文ですみません。

    • ベストアンサー
    • PHP
  • perl cgi 文字コード変換について

    掲示板でログファイルへの書き出しの際に文字コードをshift-jisに変更したいのですが, #投稿された値を受け取る if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $alldata, $ENV{'CONTENT_LENGTH'}); } else { $alldata = $ENV{'QUERY_STRING'}; } foreach $data (split(/&/, $alldata)) { ($key, $value) = split(/=/, $data); $value =~ s/\+/ /g; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg; $value =~ s/\t//g; $in{"$key"} = $value; } #ヘッダの表示 print "<html>\n"; print "<head><title>掲示板</title></head>\n"; print "<body>\n"; #受け取ったデータをファイルに書き込む if ($in{'handle'} ne '' && $in{'message'} ne '') { if (open(FH, "bbs.txt")) { @file = <FH>; close(FH); use CGI; $cgi=new CGI; $name1=$cgi->param('handle'); $name2=$cgi->param('number'); use Encode; use Encode::Guess qw(euc-jp shiftjis 7bit-jis); encode("shiftjis",decode('Guess',$name1)); encode("shiftjis",decode('Guess',$name2)); unshift(@file, "$name1\t$name2\n"); ##この部分で if (open(FH, ">bbs.txt")) { print FH @file; close(FH); } else { print "<p>ファイルに書き込めません。</p>"; } } else { print "<p>ファイルを読み込めません。</p>"; } } #投稿フォームの表示 print "<form method=\"post\" action=\"bbs.cgi\">\n"; print "<p>\n"; print "ハンドルネーム<br>\n"; print "<input type=\"text\" name=\"handle\" size=\"20\" value=\"\"><br>\n"; print "メッセージ<br>\n"; print "<input type=\"text\" name=\"message\" size=\"20\" value=\"\">\n"; print "</p>\n"; print "<p><input type=\"submit\" value=\"送信する\"></p>\n"; print "</form>\n"; #記事の一覧表示 if (open(FH, "bbs.txt")) { while ($data = <FH>) { ($handle, $message) = split(/\t/, $data); print "<p>\n"; print "投稿者:$handle<br>\n"; print "メッセージ:$message\n"; print "</p>\n"; } } else { print "<p>ファイルを読み込めません。</p>"; } #フッタの表示 print "</body>\n"; print "</html>\n"; exit; このような感じでかいたのですが文字コードを変更し,unshift(@file, "$name1\t$name2\n");と記述すると何も書かれずに空白になってしまいます..なぜでしょうか?困っています.教えて下さい. ちなみにunshift(@file, "$in{'handle'}\t$in{'message'}\n"); と文字コードの変更を意識しなかった場合にはちゃんとファイルに書かれています. jcode.plなどは使わずにencodeで行いたいです.

    • ベストアンサー
    • Perl
  • perlのソケット通信について

    perlのソケット通信でwebブラウザーのようなものを製作中なのです。 http://tohoho.wakusei.ne.jp/wwwperl2.htm#socketを参考にしたのですが、 yahooは表示されますが、xrea系のサイトのような特定のサイトが閲覧できず(どちらかというと特定のサイトのみ閲覧できる)、NotFoundかDNSエラーになります。 とほほのWWW入門のサンプルの他に追加する項目などはあるのでしょうか?よろしくお願いします。 現在の構文は以下の通りです browser.cgi 改行コードLF、漢字コードEUC ------------- #! /usr/bin/perl print "Content-type:text/html\n\n"; $addr = (gethostbyname("www.xrea.com"))[4]; $name = pack("S n a4 x8", 2, 80, $addr); socket(S, 2, 1, 0); connect(S, $name); binmode(S); select(S); $| = 1; select(stdout); print S "GET /index.php HTTP/1.0\n\n"; while (<S>) { print; } close(S);

    • ベストアンサー
    • Perl

専門家に質問してみよう