• 締切済み

Jcode CP932 のエラーを回避したい。

プログラム初心者です。 form Mailを設置し、フォーム入力→確認画面までは動くのですが、 最後に、送信ボタンを押すと、500エラーになります。 お手上げです。詳しい方お教えください。 サーバーのエラーログをみたところ、 Can't locate object method "CP932" via package "Jcode" at form_mail.cgi となっていました。 ━━ #!/usr/bin/perl require 'jcode.pl'; $sendmail = '/usr/sbin/sendmail'; use Jcode; ━━ エラーと思われる箇所 sub jis { $msg = $_[0]; # Jcode::convert(*msg,'jis'); $msg = Jcode->new($msg, "UTF8")->CP932; &jcode'convert(*msg,'jis'); } ━━

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

みんなの回答

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.2

ユニークなソースなのでどこかで見た記憶があります トピ主さんはそのページを参考にしたのでしょうか 出来ればサンプルページなど提示してもらえば 皆さんに、ソースの思考も理解してもらえると思います 細かい不具合を無理矢理、回避したいように感じました jisコードもちょっとイヤラシイので扱いに困ります use strict; use Jcode; my $utf8 = 'あ~ああ'; my($cp932,$sjis,$mime); &Jcode::convert($utf8,'jis'); print"convert jis => $utf8\n"; $cp932 = Jcode->new($utf8,"jis")->cp932; print"cp932 => $cp932\n"; $sjis = Jcode->new($utf8,"jis")->sjis; print"sjis => $sjis\n"; $mime = jcode($utf8)->mime_encode; print"mime => $mime\n"; __END__ Macターミナル表現文字、sjisの結果 convert jis => B$"!A$"$" cp932 => あ?ああ sjis => あ~ああ mime => =?ISO-2022-JP?B?GyRCJCIhQSQiJCIbKEI=?=

回答No.1

Jcode.pmにはCP932なんてないようですが?sjisの間違いでしょうか? http://openlab.ring.gr.jp/Jcode/Jcode.html#encoded_strings でも、見れば見るほど意味不明なコードですね。 $msg = Jcode->new($msg, "utf8")->jis;ではだめなのでしょうか? Perlの5.8.1以降ならJcodeなんて使わずEncodeを使えばよいと思いますが。 http://perldoc.perl.org/Encode.html use Encode qw(decode encode); $data = encode("utf8", decode("iso-2022-jp", $data));

関連するQ&A

  • jcode.plについて

    次のエラーが発生します。 Undefined subroutine &jcode::convf called at ./jcode.pl line 291. カレントに、jcode.plを置いているだけでは動作するのでしょうか? また、Jcode.pmを使った場合、 &Jcode::convert(\$test_sjis, "sjis"); と大文字にしないといけないのですが、これは仕方ないことでしょうか? てっきり、 require './jcode.pl'と use Jcode.pmの差し替えで済むと思っていました。 #!/usr/bin/perl require './jcode.pl'; my $test = "パソコン結構です。"; #文字化けチェック用 my $test_sjis = $test; my $test_ujis = $test; my $test_jis = $test; &jcode::convert(\$test_sjis, "sjis"); &jcode::convert(\$test_ujis, "ujis"); &jcode::convert(\$test_jis, "jis"); print "\$test_sjis=[$test_sjis]\n"; print "\$test_ujis=[$test_ujis]\n"; print "\$test_jis =[$test_jis]\n"; exit; __END__

    • ベストアンサー
    • Perl
  • jcode.pmでconvertできない

    UTF-8の文字をエンコードするため、jcode.plでエンコードしたのをjcode.pmに変更しました。 それで、 &Jcode'convert(*subject,'jis'); という記述を Jcode::convert(*subject,'jis','utf8'); にして、sendmailしましたが、文字化けします。 もし、良い対処方法をご存知でしたら、助けてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • CGIでメール送信がしたい

    ホームページからメールを出すCGIを作ろうとしています。 コマンドからCGIを直接実行すると問題なく動くのですが、formから動かすと Premature end of script headers: ・・・・ というエラーがでます。いろいろ探してみたんですが、分かりませんでした。 改行コードは端末からviで書いてますので、問題は無いだろうと思っているんですが… エラーはでますが、メールは送っているようです。 コマンドから実行した場合の差出人はroot@hoge.netになっているんですが、 ページから実行させたものはanonymous@hoge.netになります。 きっと勉強不足でとんでもないことをやっているんだろうと思うのですが、 探した範囲には答えがありませんでした。 どこが悪いのか教えてください。よろしくお願いします。 サーバーはVine2.6R1でApacheを使っています。 (test.html) <html> <body> <form name="down" action="/cgi-bin/test/a.cgi" method="post"> <input size="20" type="text" name="a_sel"> <input type="submit"> </body> </html> (a.cgi) #!/usr/bin/perl require '../mimew.pl'; require '../jcode.pl'; $sendmail = "/var/qmail/bin/sendmail"; $master_id = "ho\@hoge.net"; $msg="メッセージ"; &jcode'convert(*msg,'jis'); open (ML,"| $sendmail $master_id"); print ML $msg; close(ML); exit;

    • ベストアンサー
    • CGI
  • UTF-8 -> CP1251にエンコードするには?

    Perlの勉強しながらTeraPadを使って簡単なCGIをつくっている初心者です。 メインはUTF-8(多言語混在なので)で書いていて、sendmailを使ってCP1251形式(メールは全文キリル語)のメール送信したいのですが、エンコードはどのようにすればいいのでしょうか?タイトルも本文も文字化けしてしまって全く読めません(;_;) 日本語ならjcode.pl等を使って &jcode'convert(*title, "jis") のようにすればいいのでしょうがキリル語(CP1251かKOI8=R)の変換モジュールを探しても全く見つかりませんし、糸口さえ分かりません。どなたか詳しい方助けてください!ホントに困っています(T_T よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • sendmailのFROMに日本語を使う

    CGIからsedmailを呼び出してメールを送信しています。 その時に差出人の部分の日本語が文字化けしてしまいます。 そこで&jcode'convertでjisに変えたのですが、今度は CGIがサーバーエラーになってしまいます。 どうすればよいでしょうか。 スクリプトはこんな感じです。 ----------------------------------------------- $from = '両国'; $subject = 'テスト'; &jcode'convert(*from, 'jis'); &jcode'convert(*subject, 'jis'); &jcode'convert(*msg, 'jis'); $errno = 1 unless open(MAIL, "| /usr/lib/sendmail -t"); return 0 if $errno; print MAIL "To: $MailTo\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain;\n\n"; print MAIL "$msg\n"; $errno = 2 unless close(MAIL); return 0 if $errno;

    • ベストアンサー
    • Perl
  • Perlにて、sendmailを使用するがエラー…

    はじめまして、初めて質問させて頂きます、ぷりんと申します。 早速ですが、質問です。 私はPerlにてメールフォームの作成に勤しんでいるのですが、どうしても500エラーが出てしまいます。 サーバーはレンタルサーバーのロリポップを使用しております。 私が不思議に思うのは、メール自体は送信されますが、ページには500エラーと表示されてしまうことです。 以下は実際のコードです。(全文)(一部変更有(メール宛先部分)) #!/usr/bin/perl require "../mimew.pl"; require "../jcode.pl"; $sendmail = '/usr/lib/sendmail'; $to = "hogemoge\@gmail.com"; $from = "test\@test.tet"; $subject = "題"; $body = "メール本文"; # 本文をJISコードへ変換 &jcode'convert(*body,'jis'); # 標題をJISコードへ変換してMIME エンコード &jcode'convert(*subject,'jis'); $subject = mimeencode($subject); open(MAIL,"| $sendmail -t"); print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "\n"; print MAIL "$body\n"; close(MAIL); exit(0); と記述し、こちらのcgiファイルはパーミッション700(ロリポップさんが700で動くので)、アスキーコードでアップロード。 mimew.plとjcode.plどちらも一つ上のフォルダにあります。(パーミッションは644) 以上です。 当方初心者ですので、いろいろ試したのですが、どちらが悪いのか見当つきません・・。 簡単な検索をしましたが、Syntax Errorは見つかりませんでした。 また、いろいろなサイトを参考にしたり、検索したりしましたが、問題解決には至りませんでした。 おそらく初歩的なミスだとは思います・・。 こちらの問題に関してお詳しい方、どうかお手を差し伸べていただけないでしょうか。 何卒、よろしくお願い申し上げます。

    • ベストアンサー
    • Perl
  • Jcodeのインストールのエラー

    Jcodeのインストールのエラー jcodeをインストールしたのですが、以下のURLの通りにいきません。 http://openlab.ring.gr.jp/Jcode/index-j.html サーバーのOS:CentOS 6 x86_64 サクラレンタルサーバーです。 解決法を分かる方は、教えて下さい。 エラー文は、以下の通りです。 # perl -MCPAN -e shell Can't locate CPAN.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .). BEGIN failed--compilation aborted.

  • No.616076に続けて質問です

    jcode.plを読み込みたく、 #!/usr/bin/perl require './jcode.pl'; としたところ、 Can't locate ./jcode.pl…というエラーが起きました。 どのような原因が考えられますでしょうか?

    • ベストアンサー
    • Perl
  • POSTで受けたデータを jcode.pl するには

    あまりに初歩的で書き込むのが恥ずかしいです。 今、フォームからアンケートを自分宛にE-Mailで もらえる CGI を書いています。 日本語処理以外の部分はほとんど全部動きました。 しかし、日本語のテキストは、メーラ(NC4.7付属) で受信すると、「%ほにゃらら」みたいな表現に なっていて、そのままでは読めません。 jcode.pl の使い方が間違っているらしいことは 簡単に推測できますが、ではどうまちがっている のか見当がつきません。 内容: アンケートのフォームで使用しているフィールド名 は、value01~value66です。 そこで、Actionで指定している cgi で、以下のように 記述してみました。 #!/usr/local/bin/perl require './cgi-lib.pl'; require './jcode.pl'; #日本語コード変換処理 &jcode'convert(*value,'jis'); #連想配列に読み込み &ReadParse (*value); $to = 'nydela@imasy.or.jp'; $ipaddr = $ENV{'REMOTE_HOST'}; この後、メール・ファイルを開いてSendMail してやると、66個のフィールドが全部届き ますが、日本語は読めません。jcode.pl と cgi-bin.pl は、この cgi と同じディレクトリに あります。 日本語が入力される可能性のあるフィールド 番号は分かっているので、&ReadParse の後で 個別に convert したらいいのかと思ったのですが、 今度は連想配列の要素を jcode'convertに どうやって渡したらいいのかわからなくなりました。 アドバイスお願いします。 あと、どういうわけか、 $ipaddr = $ENV{'REMOTE_HOST'}; も、ブランクしか帰しません。ちなみに$ENVを たとえば PATH に変更しますと、きちんとその 値を返します。これもアドバイスお願いします。

    • ベストアンサー
    • Perl
  • メーリングリストでReply-To:やFrom:,To:の値が返ってこない。

    メールで受信して、Reolay-To: From: To:を設定しているのですが、 webサーバーのno-body@www.cgi.ne.jpなどの名前しか返ってこないのです。何処がおかしいか分かりません。設定の仕方を教えて下さい。 スクリプトは以下の通りです。 #!/usr/local/bin/perl BEGIN {use KCatch qw(source);} $sendmail='/usr/sbin/sendmail'; $myaddress='info@********.com'; require '/usr/local/lib/perl/cgi-lib.pl'; require '/usr/local/lib/perl/jcode.pl'; &ReadParse; $subject=$in{'currentValue'}; $campany=$in{'campany'}; $name=$in{'name'}; $mailfrom=$in{'mailfrom'}; if($mailfrom !~/.+@.+\..+/){&error('メールアドレスの記述ミスです。');} $url=$in{'url'}; if($url!~/^http\:\/\//){&error('URLの記述ミスです。');} $inquiry=$in{'inquiry'}; $inquiry=~s/</&lt;/g; $inquiry=~s/>/&gt;/g; #########################メール送信 $message=<<END_OF_MESSAGE; Subject:Message form ********.com Site From:$mailfrom To:$myaddress Reply-To: $mailfrom [件  名]:$subject [e_mail] :$mailfrom END_OF_MESSAGE &jcode'convert(*message,'jis'); open (MAIL,"|/usr/sbin/sendmail -t -oi"); print MAIL $message; close MAIL; print <<END_OF_HTML; Content-type: text/html <HTML> ・・・以下省略・・・

    • ベストアンサー
    • Perl

専門家に質問してみよう