• ベストアンサー

パソコン → パャRン

perlでパソコンと出力するとパャRンと表示されてしまいます。 エディターはwindowsのメモ帳で文字コードはANSIでファイルを作りました。 #!/usr/bin/perl print "Content-type: text/html;charset=Shift_JIS\n\n"; print "<HTML>"; print "<BODY>\n"; print "パソコン<BR>\n"; print "</BODY>\n"; print "<HTML>"; exit;

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

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

  • ベストアンサー
回答No.2

メモ帳での漢字はShift-JISで表現されます。 Shift-JISの文字コードは、漢字1文字を2バイトで表現します。 この2バイトの中には、"\"や"|"などPerlでは特定の処理を行ってしまう文字列が含まれます。 例えば「パソコン」の「ソ」は、Shift-JISでは0x835C。 2バイト目の0x5Cだけ見ると、"\"の文字コードと同じです。 perlでは""中に\があった場合、エスケープシーケンス記号として処理します。(例:\n=改行) つまり、「パソコン」とShift-JISで記述すると、ソの2バイト目は\として処理され、ソの次の文字の1バイト目はエスケープシーケンスとして処理されてしまうのです。 Perlでは"\"という文字を出したい場合、"\\"と記述します。 この場合、 print "パソ\コン<br>\n"; と、ソの後ろに\を挿入する事で解決できます。 Shift-JISでこの問題は様々な文字で発生します。 なお、printだけならまだしも正規表現ではもっと多くの漢字が正しく処理出来ない要員をはらんでいます。 Windows上では面倒ですが、EUC等の文字コードではこの問題は起きませんので、文字コードを変えるのが良い対策方法かと思います。

meikenpochi
質問者

お礼

spinach-chickenさん回答ありがとうございます。 print "パソ\コン<br>\n"; でパソコンと表示されました。

その他の回答 (1)

  • sisya
  • ベストアンサー率39% (97/245)
回答No.1

まず、文字コードの確認ですが、 ANSIは米国規格協会の略で、 日本語に関しては定義されていません。 また、その場合は「ISO」ですよね? メモ帳でShiftJIS以外の文字コードを扱うことは 出来なかったと思うので、ShiftJISと仮定して進めます。 「パソコン」は16進数で「8370835c83528393」 「パャRン」は16進数で「83708383528393」 つまり文字コードの5c=「\」が抜けている状態にになっています。 「\」の文字を削除する設定をどこかで行なっていませんか?

meikenpochi
質問者

お礼

sisyaさん回答ありがとうございます。

関連するQ&A

  • perl の grepで 全角カタカナで検索できません

    perl の以下のソースで、実行エラーになってしまいます。 grep で全角カタカナで検索できないのです。半角カタカナでは、うまく動きました。 全角文字(たとえば’中華’)でも正しく「中華料理」と出力されます。 ’ラーメン’で検索したら、’ラーメン店’と出力されるのが正しいと思うのですが、 なぜ動かないんでしょ? ↓ソース #!/usr/bin/perl @aaa = ("ラーメン店","カレーハウス","中華料理"); @aaa = grep /ラーメン/ , @aaa; print "Content-type: text/html\n\n"; print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">\n"; print <<"HTML"; @aaa HTML exit;

  • open (FILEHANDLE,"< $filename") or die "エラーメッセージ";について

    下記プログラムでperl_read_writes.txtを出力すると、中身が表示されるのですが、a_perl_read_writes.txt等に名前を変更すると、当然エラーが起きます。 が、die "$filenameを開けません。";の部分の $filenameを開けません。という文章が出力されないのですが、どなたか原因分かりませんか? ================================================== #!/usr/bin/perl print "Content-type: text/html;charset=Shift-JIS", "\n\n"; # HTMLの出力 print "<html>\n"; print "<body>\n"; print "ファイルの読み書き<br>\n"; $filename='/usr/local/apache/htdocs/aaa/bbb/perl_read_writes.txt'; # ファイルオープン open (FILEHANDLE,"< $filename") or die "$filenameを開けません。"; ...以下省略 ================================================== よろしくお願いします。

    • ベストアンサー
    • Perl
  • CGI勉強中(初心者です)

    #!/usr/bin/perl print "content-type:text/html\n\n"; print "<HTML>\n"; print "<head><title>CGI</title></head>\n"; print "<BODY>\n"; print "<H1><FONT COLOR=\"#FF0000\">こんにちは</FONT></H1>\n"; print "</BODY>\n"; print "</HTML>\n"; というCGIつくりました。 プロバイダの説明には Perlの場所 /usr/bin/perl または /usr/local/bin/perl となっていますが、 どこにどう置いて(ホームディレクトリでしょうか?)、どうやって起動させてよいのかさっぱりわかりません。 ご教授ください。

    • ベストアンサー
    • CGI
  • 初歩的なCGIですが

    #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>perlテスト</TITLE></HEAD>\n"; print "<BODY>\n"; print "本文1<BR>\n"; print "本文2<BR>\n"; print "</BODY>\n"; print "</HTML>\n"; 上記プログラムをFTPサーバにアップロードして、perlプログラム内では正しい結果が出たのですが、ブラウザ上で確認したら、htmlのタグが除かれた状態のソースが出てきました。  正しい結果をブラウザ上で表示させるにはどうすればいいのでしょうか?教えてください。

    • ベストアンサー
    • CGI
  • 何が違うのかサッパリ

    このまえ、スクリプトのソースで上手くいかなかったので 聞いたのですが違うようです。 何が違うのか全然わかりません。 #!/usr/local/bin/perl print "Content-Type: text/html\n\n"; print <<WC; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body bgcolor=#ffffff> <select name=\"menu\"> <option value=\"1\">こんにちは</option> <option value=\"2\">●●ですか?</option> <option value=\"3\">ゲーム好きですか?</option> </select> <input type=\"submit\"> WC if (わかりません){ print "こんにちは\n"; } elsif(わかりません){ print "いいえ違います。\n"; } elsif(わかりません){ print "いいえキライです。\n"; } else { print "質問してね。\n"; } print <<WC; </body></html> WC exit(0); 条件分岐にどう記述すればいいかわかりません。( ちゃんと調べました。どんなキーワドにしてもでません。 (もしこの質問がわかるような解説サイトがあれば教えてください) データや関数など扱えます。Perlの基礎は勉強しています。 何が“どう”違うのかやどう記述すればよいのか教えてください。

    • ベストアンサー
    • Perl
  • テキストファイル内の変数を展開して出力したい

    テキストファイル内に変数を書いておいて、出力時に その変数を展開させる方法を教えてください。 具体的には、[test.txt]を[出力]のようにしたいのです。 ためしに[test.cgi]を作ったのですが[test.txt]の内容がそのまま出てきてしまいました。 [test2.cgi]ができるなら、[test.cgi]でもできると思っていたのですが… [test.cgi] #!/usr/local/bin/perl $moji="OK"; print "Content-type: text/html\n\n"; open(IN, 'test.txt'); while (<IN>) { print "$_"; } close(IN); exit; [test2.cgi] #!/usr/local/bin/perl $moji="OK"; $naka="<HTML><BODY>$moji</BODY></HTML>"; print "Content-type: text/html\n\n"; print "$naka"; } close(IN); exit; [test.txt] <HTML><BODY>$moji</BODY></HTML> [出力] <HTML><BODY>OK</BODY></HTML>

    • ベストアンサー
    • Perl
  • 何がいけないんでしょうか?

    test.cgiの内容↓ #!/usr/bin/perl print "Content-type: text/html\n\n"; PRINT "<HTML>"; PRINT "<BODY>"; PRINT "おはよう"; PRINT "</BODY>"; PRINT "<HTML>"; 500 Internal Server Error というメッセージが出ます。 どうしてですか?

    • ベストアンサー
    • CGI
  • perlでHTML出力時の文字コード

    Perlスクリプト中でHTML出力しているのですが、print "Content-type: text/html\n\n";と記述するとEUCで正常に表示され、print "Content-type: text/html; charset=Shift_JIS\n\n";と明示的にSJISを指定すると空白ページが表示されてしまいます。このスクリプトの他の場所ではprint "Content-type: text/html; charset=Shift_JIS\n\n";で正常にSJISで表示されます。どうしてだかわかりません。どなたかご教授お願いします。

  • テキストファイルのHTMLタグを文字として表示させるには?

    テキストファイルのHTMLタグを文字として表示させるにはどうすればよいのでしょうか? <HTML>の"<"をJIS文字コードに置き換えれば良いというようなことを聞きましたが、 $_ =~ tr/</&lt);/s; この文字を置き換える式では駄目でした。 多分表記の仕方が間違っていると思うので正しいのをよろしくお願いします。 (上の置き換え文だと&HTML>になってしまいます。) #!/usr/bin/perl main:{ require "jcode.pl"; $file = 'file01.txt'; print "Content-type: text/html\n\n"; print "<HTML><BODY>\n"; print "<TITLE>表\示</TITLE>\n"; open( FH, $file) or die "Can't open"; foreach( <FH> ){ $_ =~ tr/</&lt);/s; print $_ ."<br>"; } close(FH); print "<br>_<br><"; print "</BODY></HTML>\n"; }

    • ベストアンサー
    • Perl
  • ヒアドキュメントが表示されない

    perl初心者です・・ perlを本で学習してる最中なのですが、print文だとブラウザに表示されるのに、ヒアドキュメントで記述するとブラウザに表示されません。 (AN HTTPDサーバーを使用して、起動させています。) 例えば、 #!/usr/bin/perl print "content-type: text/html\n\n"; print "<html><body>"; print "ああ"; print "<br>"; print ("いい","うう","ええ","です"); print "<br>"; print "</body></html>"; ↑この記述だとブラウザに表示されますが、 #!/usr/bin/perl print <<HTML_DOCUMENT; content-type: text/html <html> <body> ああいいううええです </body> </html> HTML_DOCUMENT ↑このようにヒアドキュメントに書き換えてブラウザで表示させると、 サーバーが見つかりませんと表示されます。 ちなみに、本に添付してあるCD-ROMの回答ソースをコピペして表示させてみましたが、同様にサーバーが見つかりませんと表示されます。 ですので、文法には間違いはないと思うので、ANHTTPDサーバーに原因があるのではないかと思われるのですが、何か、ANHTTPDサーバーに設定をする必要があるのでしょうか? 教えてください。 ちなみに、環境windowsXPです。

    • ベストアンサー
    • Perl

専門家に質問してみよう