• 締切済み

文字化けを修正して表示

すでに文字化けして保存されてしまっているメールのsubujectの文字化けを修正して表示させたいと思っています。CGI/perlでこのようなことは可能なのでしょうか。 NAMAZUにおいてはどうやらできているので、もしperlじゃなくこうすればできるというのでもかまいませんので教えていただけませんでしょうか。 なお、メールのsubjectは次のようにして抜き出しました。 FILESUBJECT: while (<@fileadd>){   #fileaddはファイルのリスト open (MFILE,$_); while (<MFILE>){ if ($_,/^Subject:/) { s/Subject://; chop; push @subject,$_; #print; next FILESUBJECT; } } } print "@subject\n"; これでsubjectの中身は取れるのですが、文字化けをどうすれば直せますか? なお、OSはsolaris8です。

  • bukas
  • お礼率57% (12/21)
  • CGI
  • 回答数2
  • ありがとう数2

みんなの回答

  • duckling
  • ベストアンサー率47% (88/185)
回答No.2

require './jcode.pl'; &jcode'convert(*subject,'jis'); これじゃダメですか?

bukas
質問者

お礼

試してみましたがJcodeではうまく機能しませんでした。 結局nkfでファイルそのものにフィルタを通してから抜き出すことで解決しました。 アドバイスありがとうございます。

  • bagyo
  • ベストアンサー率40% (16/40)
回答No.1

こんにちわ。 具体的に、Subjectの文字化けというのは、どのような感じになっているのでしょうか? 例えば、=?ISO-2022-JP?のようになっているのでしたら、エンコードされているだけなので、元に戻すための規則があったはずです。(詳しくは知りませんが...) また、元々8bitだったのが途中で1bit削られ、7bitになってしまったものについては、例えばFreeBSDのportsの中に、recjis-1.0のようなソフトウェアがあります。

bukas
質問者

お礼

アドバイスありがとうございました。 おかげで、文字コードの変換を詳しく調べることで問題を解決することができました。 結果的には、nkfでファイルをフィルタリングしてから該当部分を抜き出すことで問題を解決しています。

関連するQ&A

  • NAMAZUでの文字化け

    namazu.cgiにアクセスすると文字化けして困っております。 (Red Hat Enterprise Linux ES release 3  Apache/2.0.46  namazu-2.0.16 Kakasi-2.3.4) http://www.amays.com/~mizusawa/namazu_kaisetu/ ↑ こちらのサイトを見ながら、namazuのインストールをして、 namazu.cgiにアクセスしたところ、CGIとして認識されませんでした。 そこで、httpd.conf内に一行 AddHandler cgi-script .cgi を追加したところ、CGIとして動きましたが、文字化けします。 具体的には、Namazu 、ヒ、隍・エハクク。コキ・ケ・ニ・・/h1> というような表示になってしまいます。 ブラウザー(IE)で「表示」→「エンコード」を見ると、Shift-JISが 選択されているので、これをEUCに訂正すると、文字化けが 修正されて、namazu検索も出来るのですが、もし、文字化け対策の 知恵をお持ちの方がいらっしゃいましたら、ぜひ教えてくださいませ。 よろしくお願いします。

  • 文字化け

    下記のようなcgiスクリプトがあり、test1.cgi から リンクの test2.cgiを呼ぶと 「リンドウ」が文字化けしてしまいます。 文字化けしないようにするには、どうしたらいいでしょうか。 Perl cgi 初心者です。 --------test1.cgi----------------------------------------- #!/usr/bin/perl print "Content-Type: text/html; charset=EUC-JP\n\n"; $name="リンドウ"; print "name=$name<br>"; print "<a href=\"test2.cgi?aaa,${name},bbb\">test2.cgi</a>\n"; ---------test2.cgi------------------------------------------------- #!/usr/bin/perl print "Content-type: text/html; charset=EUC_JP\n\n"; $query = $ENV{'QUERY_STRING'}; print "query=$query\n";

    • ベストアンサー
    • CGI
  • 初心者で、困っています。(文字化け)

    すみません、すごく初歩的なことで困っています。 本を見ながら、下のようなものを書いたのですが、 出力すると、文字化けをしてしまいます。ウィンドウズの環境で、Perlは5.8を使い、読み込みのテキストはUnicodeです。どのようにすれば、文字化けをしないで、読み込めるのでしょうか。 open ( IN , "LBa3_00028.txt" ) or die; open ( out , ">out.txt" ); while ( $line = <IN>){ print out "$line\n"; } close(out); close(IN);

    • ベストアンサー
    • Perl
  • Perlからメール送信で文字化け

    Perl5.8からsendmailを使ってメール送信しています。 髙や﨑が入ると文字化けします。文字化けしないようにする方法を教えてください。 #!/usr/bin/perl require 'jcode.pl'; require 'mimew.pl'; $sendmail = '/usr/lib/sendmail'; print"Content-type: text/html\n\n test\n"; if (!(open(OUT,"| $sendmail -t -i -f xxxx\@hogehoge.co.jp"))) { ; } print OUT "To: xxxx\@hogehoge.co.jp\n"; print OUT "From: xxxx\@hogehoge.co.jp\n"; print OUT "Reply-To: xxxx\@hogehoge.co.jp\n"; $subject = "サブジェクト 髙﨑"; $subject = &mimeencode($mail_subject); print OUT "Subject: $mail_subject\n"; print OUT "Mime-version: 1.0\n"; print OUT "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n"; print OUT "Content-Transfer-Encoding: 7bit\n\n"; $honbun = "メール本文 髙﨑"; &jcode'convert(*honbun, 'jis'); print OUT "$honbun\n"; close(OUT);

    • ベストアンサー
    • Perl
  • TXTに出力すると文字化けが起こる

    Ajaxで送信したデータを元にCGI(Perl)でTXTファイルを書き換えると、 どうしても文字化けしてしまいます。 内容はこんな感じです。無駄な部分は省きました ************************* #!/usr/local/bin/perl print "Content-type: text/html; charset=Shift_JIS\n\n"; use CGI; $n = $q->param("name"); $data = "$nさん、こんにちは"; open(F,"> data.txt"); flock(F,2); print F $data; flock(F,8); close(F); end; ************************* $n(フォームのデータ)は文字化けしないのですが、 「さん、こんにちは」の部分が文字化けしてしまいます。 詳しい方、ご教授願います。

    • 締切済み
    • CGI
  • sendmailの文字化け

    フリーのショッピングカートのCGIをダウンロードして使ってみたところ、カート自体は問題なく動きましたが、sendmailで送信した内容が文字化けしています。 件名は $subject = &mail64encode($subject);sub mail64encode { local($subject) = $_[0]; &jcode'convert(*subject, "jis"); …省略… の形でエンコードしているので日本語で表示されています。 本文は if( open(MAIL,"| /$mail_pass1/$mail_pass2/sendmail $email")) { &conv; print MAIL "From: $email\n"; print MAIL "To: $user\n"; print MAIL "Subject: $subject\n"; print MAIL "注文年月日\n"; print MAIL "$date\n"; print MAIL "お名前 $regname\n"; ・・・省略… print MAIL "---------------------------------------------------------------\n"; print MAIL "Remote addr: $ENV{'REMOTE_ADDR'}\n"; print MAIL "Remote host: $ENV{'REMOTE_HOST'}\n"; print MAIL "User Agent : $ENV{'HTTP_USER_AGENT'}\n"; close(MAIL); となっています。 print mail の中身はそのまま出力されるのではないのですか? 別にエンコードが必要ですか? 英数字は問題なく出力されるようですが、日本語は全滅です。 jocode.plを使用しています。 どなたかご教示下さい。

  • ”ァー”が含まれている文字を置換すると文字化け

    OS:solaris8 perlのver:5.8.6 perlで、”ァー”が含まれている文字列に対し、 全角スペースを半角スペースに置換しようとすると 文字化けしてしまいます。 (”ぁー”でもどうようでした) ”ぃー”や”ぅー”、”ぁ”では 問題無いのですが…。 当方、perl初心者&文字コードに詳しくないため、 原因がよくわからないでいます。 どなたか原因をおわかりの方、 ご教授お願いいたします。 文字コードはEUCです。 以下はソースです my $line = "ファイヴァー スコープ 眼鏡"; $line =~ s/\t/ /g; # タブを半角スペースに置換する print '$line2='.$line."<br>\n"; $line =~ s/ / /g; # 全角スペースを半角スペースに置換する print '$line3='.$line."<br>\n"; #↑ここで文字化けしてしまいます $line =~ s/^\s+//; # 頭の空白を除く print '$line4='.$line."<br>\n"; $line =~ s/\s+$//; # 尻の空白を除く print '$line5='.$line."<br>\n";

    • ベストアンサー
    • Perl
  • メールフォームCGIの文字化け。どなたか助けてください。

    こんにちは。メールフォームを作ったのですが、 テスト送信すると文字化けになってしまいます。 それも、短い文章なら、日本語で表示されるのですが、文章がながくなると、一部分が文字化けしてしまいます。ヤフーの長い記事を貼り付けてみたのですが、やっぱり長いと変なところが文字化けしてしてしまいます。また、テストテストテストテスト・・・ とコピペすると、14行目あたりから急に テストテストテストテストテストテストテストテストテ! %9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%・・・・・・・ となってしまいます。いったいどのように書けば文字化けを起こさないで送信できるのでしょうか。。 以下はメールのサブルーチンです。どこがおかしいのでしょうか?ご指導お願いいたします。 sub mail{ $mail_body .= "$mes\n"; $mail_body .= "$mes2\n"; $mail_body .= "$mes3\n"; &jcode'convert(*mail_body,'jis'); $subject2 = &mimeencode($subject); open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n"; print MAIL "From: $from_mail\n"; print MAIL "To: $to_mail\n"; print MAIL "Subject: $subject2\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "$mail_body\n"; close (MAIL); }

    • ベストアンサー
    • Perl
  • ダウンロード時のファイル名文字化け

    nakamuraと申します。  あるweb上のリンクからファイルをクライアント側にてダウンロードするプログラムを作成しました。リンクからcgi(Perl)を起動してそのcgiからファイルダウンロードを実行します。cgiを起動する際、日本語ファイル名(euc)を渡して、それをcgiよりsjisにコンバートしてからダウンロードを実行させています。ある特定の文字だけ文字化けする現象が発覚しました。ある特定の文字とは、ラリルレロワヲン です。このどれかが一つでも入っているとファイル名が文字化けしてしまいます。他にもあるかもしれませんが、自分が見つけたのはこの文字です。  ちなみに、リンクを右クリックで、対象をファイルに保存だと、ファイル名は文字化けしません。  色々ネットで調べたのですが、対応方法がとんとわかりませんでした。ASP、java等の対応方法はいくらでもあるのですが、cgi(Perl)の対応方法が見つかりません。 どなたかご存知の方いらっしゃいますでしょうか。 ちなみに サーバ側 OS:Red Hat Enterprise Linux ES release 4 (Nahant Update 4) cgi(Perl):5.8.5 クライアント側IE:6.0SP2 念のため下記にコードを記します。 #!/usr/local/bin/perl require '../cgi-lib.pl'; require '../jcode.pl'; &ReadParse(*in); # パラメータを変数に代入する。 #日本語ファイル名 $JPFileName = $in{'JPFileName'}; #ファイル保管ディレクトリの絶対パス $FileStoragePath = '/html/file/'; #日本語文字列の変換 &jcode'convert(*JPFileName, 'sjis'); &outputFile(); exit(0); sub outputFile { $FHND = "<$FileStoragePath/$FileName"; if (open FHND) { print ("Content-type: Application/octet-stream\n"); print ("Content-Disposition: inline; filename=\"$OriginalFileName\"\n\n"); while (<FHND>) { print $_; } close FHND; } else { ~エラー表示のためのhtml表示~ exit(0); } }

  • メールを文字化けしないようにしたい

    次のようにメールを送信しようとしています。 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