文字化けしたときはnkf -mBにて日本語にしたい

このQ&Aのポイント
  • 文字化けした場合には、nkf -mBコマンドを使用して日本語に変換する方法があります。
  • 文字化けが起きている場合には、catコマンドやawkコマンドを使用して日本語部分を抽出し、nkfコマンドで変換することができます。
  • ただし、文字化けの発生パターンによっては異なる処理が必要になる場合があるため、条件分岐を使って処理を分けることができます。
回答を見る
  • ベストアンサー

文字化けしたときはnkf -mBにて日本語にしたい

cat $HEADER |awk '/^Subject/'|nkf 上記コマンドにて日本語が表示される場合と =?ISO-2022-JP?という文字化けが起こる時があります。 なので、出来れば cat $HEADER |awk '/^Subject/'|nkf |if /=?ISO-2022-JP?/ ;then nkf -mB (笑) のようなコマンドで、文字化けが起きてる時だけnkf -mBコマンド を使うようなことはできないでしょうか 以下のようにcase文で試しましたがだめでした。 おそらくパターンにマッチする時の処理に 代入するということができないから失敗するのだと思います。 SUB=`cat $HEADER | awk '/^Subject/' case "$SUB" in =?ISO-2022-JP?*) $SUBJECT=`echo $SUB |nkf -mB` *) $SUBJECT=`echo $SUB |nkf` esac mail -s "$SUBJECT" アドレス

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

  • ベストアンサー
  • pakuti
  • ベストアンサー率50% (317/631)
回答No.1

case "$SUB" in *=?ISO-2022-JP?*|*=?iso-2022-jp?*) $SUBJECT=`echo $SUB |nkf -mB` ;; *) $SUBJECT=`echo $SUB |nkf` esac でどうでしょう?

r-linux
質問者

お礼

ありがとうございます。 セミコロンを忘れてましたねっ 教えていただいた内容だとやはり代入されませんでした。 でも、文字化けした時、もしくはしない時としっかり 分かれてコマンドとして実行していたので、 一度ファイルにリダイレクトして、そのどちらかをSUBJECTに代入して ファイルが見つかりません。というエラーをデブヌルしてあげたら 正しい情報だけをSUBJECTに入れることができました!! case "$SUB" in *=?ISO-2022-JP?*|*=?iso-2022-jp?*) echo $SUB |nkf -mB > ./iso.$$ ;; *) echo $SUB |nkf > ./no-iso.$$ esac SUBJECT=`cat ./iso.$$ ./no-iso.$$ 2>/dev/null` ありがとうございます!!

関連するQ&A

  • smrshを使ってプログラムを動かすと正常に動作しない

    現在メール受信したら、プログラムを実行するよう /etc/smrshにリンクを作成したところ、プログラムは実行されるのですが、 その中でメール送信時に送信者(From:)と件名(Subject:)を mailユーザのメールヘッダーから抜き出してメール送信の件名と From:に割り当てています。 (意味つたわってますでしょうか。。) それが、直接プログラムを実行すればしっかりとmailユーザに 届いたメールのヘッダーから 件名を抜き出し自身の件名とし、 送信者アドレスを抜き出し自身が送信者(From:)となり 指定したアドレスへメール送信する。ということが出来るのですが、 /etc/smrshを介した際には$SUBJECTと$ADDRESが代入されなくなってしまいます。 ---------------------------------------------------------- ADDRES=`cat /var/mail/mail |nkf -e|\ awk '/^From/'|cut -d'<' -f2 | tr -d ">"|head -1` SUB=`cat /var/mail/mail |nkf -e |\ awk '/^Subject/,/*/' |head -4|\ awk '!/^Date/&&!/^From/&&!/^X-/&&!/^Message-ID:/' |\ awk '{printf "%s",$0}'|\ sed -e 's/^Subject: //' -e 's/^ \+//'` case "$SUB" in *=?ISO-2022-JP?*|*=?iso-2022-jp?*) echo $SUB |nkf -mB |\ cut -d ':' -f2,3,4,5,6 |\ sed "s/^/Re:/" > ./iso.$$ ;; *) echo $SUB |nkf > ./no-iso.$$ esac SUBJECT=`cat ./iso.$$ ./no-iso.$$ 2>/dev/null` nkf <<ADMIN | mail -s "$SUBJECT" アドレス -- -f "$ADDRES" 本文 SUBJECT="$SUBJECT" ADDRES="$ADDRES" ADMIN ---------------------------------------------------------- メールログには以下の出力がありました。 Authentication-Warning: 自ホスト: mail set sender to <> using -f from=<>, と出力されておりました。 /etc/smrshを使ってプログラムを実行した場合は 代入が旨くいかないということがあるのでしょうか?

  • mail()の文字化けについて

    HPでPHP3のmail()を使って利用者にmailを出しているのですが、 かなりの頻度で文字化けしてしまっています。 コンピュータ同士の相性の問題なのでしょうか? それともプログラムに不備(あるいはこうすれば解消する) があるのでしょうか。 是非是非とも御教授のほどお願いいたします。 OSはUNIX(Irixv6.5.1)でwebサーバはAppach、phpは4でなく3(そのためnkfでエンコードしてます)、文字コードはEUCでUPしています。 $to="(formで入力された利用者のアドレス)"; $subject="(固定)"; $body="(formで利用者が入力されたものあり)"; $header="Content-Type: Text/Plain;charset=iso-2022-jp\nFrom: office@○○○×××.com\n"; $pp=popen("echo '$subject' | /usr/local/bin/nkf -j","r"); while(!feof($pp)){ $jis_sub=$jis_sub.fgets($pp,1024); } $base64_sub=base64_encode($jis_sub); $mime_sub="=?ISO-2022-JP?B?".$base64_sub."=?="; $pp=popen("echo '$body' | /usr/local/bin/nkf -j","r"); while(!feof($pp)){ $jis_body=$jis_body.fgets($pp,1024); } mail($to,$mime_sub,$jis_body,$header);

    • ベストアンサー
    • PHP
  • nkf -mについて

    procmailの設定で :0 * ^Subject:.*iso-2022-jp * ^Subject:.*\/.* * ? echo "$MATCH" | nkf -meZ | sed 's/[[:space:]]//g' | egrep 'これは儲かる' /dev/null 「Subjectがiso-2022-jpで、”これは儲かる”という文字列を含む場合そのメールは/dev/nullに送る」という意味になるそうです。 その中にあるnkf -meZのうち、mのオプションの意味が、ネットで検索してもでてきません。これはどういうオプションなのでしょうか。 また、2つめのSubjectのところにある「/」なんですが、これは何のためにあるのでしょうか。

  • Gmailへのメール送信で文字化け

    PHPでフォームメールの作っているのですが、Gmailで送信したメールを受け取ると□□□□□というように文字化けが起こっていまいます。 アウトルック、ホットメールなどは大丈夫なのですが、グーグルのGmailだけ駄目なようです。なぜ文字化けするのでしょうか? mb_language("Ja"); $header = "From: reminder@aaa.com\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: text/plain;charset=ISO-2022-JP\r\n"; $header .= "Content-Transfer-Encoding: base64"; $to = "aaa@gmail.com"; $subject = "送信テスト"; $body = "本文テスト本文テスト"; $subject = base64_encode($subject); $subject = mb_convert_encoding($subject,"ISO-2022-JP"); $subject = "=?ISO-2022-JP?B?" . $subject . "=?="; $body = base64_encode($body); $body = mb_convert_encoding($body,"ISO-2022-JP"); $success = @mail($to,$subject,$body,$header); if($success) print "成功"; else print "失敗";

    • ベストアンサー
    • PHP
  • man nkfの文字化け

    Cygwinでman nkfすると文字化けするので、直し方を教えて下さい。 最新のnkf-2.1.4.tar.gzを使っています: $ man nkf nkf(1) NAME nkf - $B%M%C%H%o!<%/MQ4A;z%3!<%IJQ49%U%#%k%?(B SYNOPSIS nkf [-butjnesliohrTVvwWJESZxXFfmMBOcdILg] [file ...] DESCRIPTION nkf $B$O%M%C%H%o!<%/$G%a!<%k$d%K%e!<%9$NFI$_=q$-$r$9$k$?$a$K:n$i$l$?!"4A;z%3!<%I$NJQ49%U%#%k%?$G$"$k!#(B http://qiita.com/Takeru/items/1694653253a9bf038b47を参考にnkf.1jを変換してみました: 変換前: $ cat nkf.1j | grep -A7 ".SH \"NAME\"" .SH "NAME" nkf \- %M%C%H%o!<%/MQ4A;z%3!<%IJQ49%U%#%k%? .SH "SYNOPSIS" .IX Header "SYNOPSIS" nkf \fB[\-butjnesliohrTVvwWJESZxXFfmMBOcdILg]\fR \fB[\fR\fIfile ...\fR\fB]\fR .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBnkf\fR $O%M%C%H%o!<%/$G%a!<%k$d%K%e!<%9$NFI$_=q$-$r$9$k$?$a$K:n$i$l$?!"4A;z%3!<%I$NJQ49%U%#%k%?$G$"$k!# 変換後: $ cat nkf.1j | nkf -w8 | grep -A7 ".SH \"NAME\"" .SH "NAME" nkf \- ネットワーク用漢字コード変換フィルタ .SH "SYNOPSIS" .IX Header "SYNOPSIS" nkf \fB[\-butjnesliohrTVvwWJESZxXFfmMBOcdILg]\fR \fB[\fR\fIfile ...\fR\fB]\fR .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBnkf\fR はネットワークでメールやニュースの読み書きをするために作られた、漢字コードの変換フィルタである。 ・・・ここまではうまくいってそうですが、 cp -p nkf.1j nkf_Org.1j とバックアップを取って、 cat nkf_Org.1j | nkf -w8 > nkf.1j と上書きしても文字化けしたままです: $ man nkf nkf(1) NAME nkf - $B%M%C%H%o!<%/MQ4A;z%3!<%IJQ49%U%#%k%?(B SYNOPSIS nkf [-butjnesliohrTVvwWJESZxXFfmMBOcdILg] [file ...] DESCRIPTION nkf $B$O%M%C%H%o!<%/$G%a!<%k$d%K%e!<%9$NFI$_=q$-$r$9$k$?$a$K:n$i$l$?!"4A;z%3!<%I$NJQ49%U%#%k%?$G$"$k!#(B (jが付かない)nkf.1は英語用でしょうか? nkf.1に上書きしたり、nkf.1自身を変換したりしましたが、どれも文字化けしたままです。 他に何か試せることはありますか? 他の方はどうされているのでしょうか?

  • メールの文字化け

    define( 'CNST_MAIL_REPLY' , 'aaa@aaa.co.jp' ); define( 'CNST_MAIL_FROM_ADDR' , 'aaa@aaa.co.jp' ); define( 'CNST_MAIL_ERROR' , 'aaa@aaa.co.jp' ); define( 'CNST_MAIL_FROM_NAME' , 'ここが、差出人で、日本語表示したいんですが文字化け' ); define( 'CNST_MAIL_TO_ADDR' , 'aaa@aaa.co.jp' ); //* メールアドレス設定 *// $mail_header = ""; if ( CNST_MAIL_REPLY != "") { if ( $mail_header != "") { $mail_header .= "\n"; } $mail_header .= "Reply-To: ".CNST_MAIL_REPLY; } $from = "From: "; if ( CNST_MAIL_FROM_NAME != "") { $from .= "\"".CNST_MAIL_FROM_NAME."\""; } if ( CNST_MAIL_FROM_ADDR != "") { $from .= " <".CNST_MAIL_FROM_ADDR.">"; } if ( $mail_header != "") { $mail_header .= "\n"; } $mail_header .= $from; if( CNST_MAIL_ERROR != "") { $errors_to = "Errors-To: "; $errors_to .= CNST_MAIL_ERROR; if( $mail_header != "") { $mail_header .= "\n"; } $mail_header .= $errors_to; $sub_parm = "-f".CNST_MAIL_ERROR; $mail_subject = mb_convert_encoding($mail_subject, "ISO-2022-JP","SJIS"); $mail_text = mb_convert_encoding($mail_text, "ISO-2022-JP","SJIS"); $mail_header = mb_convert_encoding($mail_header,"ISO-2022-JP","SJIS"); // メール送信処理 mb_language("Japanese"); mb_send_mail($to, $mail_subject, $mail_text, $mail_header, $sub_parm); 上のメール送信プログラムなんですが、 差出人の名前が文字化けしてしまいます。 質問のしかたがよくわからなかったのでプログラムをのせました。 アドバイス宜しくお願いします。

    • ベストアンサー
    • PHP
  • mb_send_mail で一部文字化けします

    mb_send_mail で一部文字化けします。 URLやキーワードとかそういった文字をいれた変数です。 基本UTF8で作ってます。 mb_language("Japanese"); mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); mb_detect_order("ASCII, JIS, UTF-8, EUC-JP, SJIS"); $subject = "てすと"; $to =$email; $header .= "From:admin@example.jp\n"; $header .= "Return-Path:admin@example.jp\n"; $header .= "Date:"; $header .= date("D, d M Y H:i:s O"); $body .= "\n"; $body .= "◆URL:"; $body .= $url[$count]; mb_send_mail($to,$subject,$body,$header);

    • 締切済み
    • PHP
  • PHPでmailもしくはmb_send_maiを使って文字化け

    いろいろサイトで調べてもはっきりした答えがないので質問しました。 パターン1・・・mail関数 $mail_subject = '入会申込受付のご連絡'; $mail_subject = base64_encode($mail_subject); $mail_subject = '=?ISO-2022-JP?B?' . $mail_subject . '?='; $header = "From: $sousin_email\n"; $header .= "Reply-To: $email\n"; $header .= "Date: $mail_date\n"; $header .= "X-Mailer: PHP/".phpversion()."\n"; $mail_body= "こんにちは"; mail($myemail, $mail_subject,$mail_body,$header);//ユーザーへ この場合、OutLook、Docomo、AUのメーラーでは問題なしですが、Vodafoneの3G機種(703SH)では件名・本文が文字化け パターン2・・・mb_send_mail $mail_subject = '入会申込受付のご連絡'; $mail_body= "こんにちは"; $header = "From: $sousin_email\n"; $header .= "Reply-To: $email\n"; $header .= "Date: $mail_date\n"; $header .= "X-Mailer: PHP/".phpversion()."\n"; mb_language("Japanese"); mb_internal_encoding("sjis"); mb_send_mail($myemail, $mail_subject,$mail_body,$header);//ユーザーへ この場合、本文はvodafoneも含め文字化けしないのですが、件名が「e会申込受付のご連絡」となってしまい、入という文字が表示されません。いくつかの文字がそのように化けるのですが何が化けるのかは検証はできておりません。 mailでもmb_send_mailでもいいのですが、すっきりとほどんどのメーラーで対応できる方法はあるのでしょうか? どなたかご教授お願いします。

    • 締切済み
    • PHP
  • mail()でメール送信で、特定のメーラーの受信のみ件名が文字化け

    PHPでメール配信プログラムを作っております。 配信テストを行なったのですが、特定のメーラーで件名が文字化けしてしまう現象に見舞われしてしまい、対処法を探しております。 ■テストメーラー 1、OutlookExpress 2、EdMax 3、Thunderbird ■ソース(一部抜粋) mb_language('Japanese'); mb_internal_encoding("SJIS"); //1 $subject = mb_encode_mimeheader($subject); //2 $subject = mb_convert_encoding($subject,"JIS","SJIS"); $send_body = mb_convert_encoding($send_body,"JIS","SJIS"); $header = "From: $fronmail.\n"; $header .= "Return-path: $return\n"; $header .= "Reply-To: $fronmail.\n"; //3 $header .= "Subject: $subject\n"; $header .= "Message-ID: {$MessageID}\n"; $header .= "MIME-Version: 1.0\n"; $header .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; //4 $header .= "Content-Transfer-Encoding: base64\n"; $header .= "X-Mailer:PHP/".phpversion(); $chk_mail = mail($to_email,$subject,$send_body,$header); ■設定値 $body = $subject = "日本語テスト"; メールアドレスはプロバイダなどが発行しているもの ■現象 ソースのままだと1、2は件名は文字化けせず、3は文字化け(???{????? ※?はひし形に囲まれた?です)します。 それぞれコメントアウトを外したり切り替えたりするのですが、1、2も件名が文字化けになったりします。 3は基本的にどのコメントアウトを有効にしても文字化けのままです。 $subjectに関しては、mail関数のものが優先のようでして、試しに空にしてみたのですが、件名も空のままでした。 何故この形式を取っているかというと、半角カナを使いたいが為でして、mb_send_mailだと半角カナが使えなかったような気がしてmailを使っております。 あと、popenで直接コマンドを打つという手もありそうですが、sendmailではなくpostfixなのですがpostfixでコマンドをという手段を探した方が良いのでしょうか? 出来ればmailを使って文字化けもしない方向を希望なのですが、それが駄目なら他の手段など誘導していただければ幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • phpのmb_send_mailで携帯のみ文字化け

    PHPのmb_send_mail関数でメールを送信しています。 メールサーバーはGoogleAppsのを使っています PHPのバージョンは5.1.6 --- 下記ソース --- //日本語と内部文字エンコードの指定 mb_language('ja'); mb_internal_encoding('UTF-8'); $parameter = "-f hoge@example.co.jp";//return_path設定 // ↓コレだと携帯では文字化けしないが、Gmailへ送信すると文字化け //$subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8")); $header = ""; $header .= "From: {$subject}<{$from}>"; $message = str_replace("\r", "", $message); $res = mb_send_mail($to, $subject, $message, $header, $parameter);

    • ベストアンサー
    • PHP