- 締切済み
linuxからのメールが文字化けとなる
linux文字コードはutf8,linuxからOutlook Expressに送信する。 受信したメールは文字化けとなる。なぜですか。 linuxで、シェルの中で、下記の部分で、送信する。 /sbin/service snmpd start 2>&1 | \ /bin/mail -s "snmpd was restarted tomatically." s@ks.co.jp 上記のソースを見ると、分かると思いますが。 メールの本体について、linuxで、VIモードで、 snmpd を起動中: ^[[60G[ ^[[0;32mOK^[[0;39m ]となっています。 catモードで、見ると、snmpd を起動中: [OK] となっています。 どうすれば、文字化けがなくなれますか。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- astronaut
- ベストアンサー率58% (303/516)
最後と言いつつ、もう一点 > ソースを修正する以外のやり方 /bin/mail をスクリプトに置き換えて、ここでフィルタを通してしまうという手もありますね。非常に乱暴なやり方なのでお勧めしませんが。
- astronaut
- ベストアンサー率58% (303/516)
うは、ノンストップですな…これで最後にします。 /bin/mail を sed 's/\x1b\[[0-9;]*[mG]//g' | iconv -f UTF-8 -t iso-2022-jp | /bin/mail に置換するフィルタの例です。 sed "s@/bin/mail@sed 's/\\\\x1b\\\\[[0-9;]*[mG]//g' | iconv -f UTF-8 -t iso-2022-jp | /bin/mail@g"
- astronaut
- ベストアンサー率58% (303/516)
> なぜ、文字化けとなりますか。 Outlook Expressが、UTF-8の自動検出に対応してないか、ごく僅かな日本語文字列しか無いために、自動検出に失敗しているかのどちらかでしょう。いずれの場合でも、#1 さんがおっしゃるように、Header にコードが指定してあれば化けません。 Outlook Express から UTF-8 のメールを送る際は、適切なHeaderが付加されているはずですが、mail コマンドではHeaderが付加されませんので。 > 何千本のソースを対応しなければならないので、何か作業量を減らす方法とかありますか。 全部がシェルスクリプトで、決まったパターンがあるなら、自動的に書き換えるようなコードを書いて使えば良いと思います。 必ず mail コマンドにパイプするようになっているなら、その直前にフィルタを追加するような、比較的簡単なスクリプトで対応できると思います。頑張ってください。
- astronaut
- ベストアンサー率58% (303/516)
ちょっと書いてみました。 何千本ものソースに対応できるかは不明ですが。。。 /sbin/service snmpd start 2>&1 | sed 's/\x1b\[[0-9;]*[mG]//g' | iconv -f UTF-8 -t iso-2022-jp | mail -s .... iso-2022-jp は極めて標準的なので、決め打ちで大丈夫だと思います。
お礼
ご丁寧にご回答していただいて、ありがとうございます。 すみません。まだ質問があります。 (1)なぜ、文字化けとなりますか。 linux文字コードはutf8,linuxからOutlook Expressに送信する。 受信したメールは文字化けとなる。 Outlook Expressで、utf8のメールを送信しても文字化けとなりません。 これはなぜですか。 (2)何千本のソースを対応しなければならないので、何か作業量を減らす方法とかありますか。
- astronaut
- ベストアンサー率58% (303/516)
>「snmpdを起動中」の部分も化けています。 では、serviceコマンドの出力をメールで標準的に用いられる文字コードに変換する /sbin/service snmpd start 2>&1 | iconv -f UTF-8 -t iso-2022-jp | mail -s ..... とか、そもそもメッセージを英語にする LANG=C /sbin/service snmpd start 2>&1 | mail -s ..... などの対応が考えられます。 ただし、それでも [OK] の前後の制御文字列は残ってしまいますので、 > 制御文字列を取り除くようなフィルタを通す必要があります。』はどいうことですか。 sed などを使って、制御文字を削除するということです。
お礼
どうもありがとうございます。さすがという感じです。 まだ、質問があります。 実際に何千本のソースは上記のような問題があります。 各ソースで、出すメールも違います。 (1)制御文字列を取り除くことについて、 snmpd を起動中: ^[[60G[ ^[[0;32mOK^[[0;39m ]の中に、 制御文字は^[、G、mだけですが、制御文字にいろんな種類があります。 何千本のソースについて、制御文字が違うので、sedの利用方法も違うでしょうと思います。1つのsedの利用方法で、各ソースで、りようできれば、いいかなと思います。 (2)いろんなメーラがあります。Outlook Expressだけではないです。 メーラの文字コードも違います。文字コードをiso-2022-jpに変換しても大丈夫ですか。
- astronaut
- ベストアンサー率58% (303/516)
Outlook Express で「snmpdを起動中」の部分も化けているのでしょうか? [OK] の部分だけが化けているのであれば、文字コードの問題ではありません。端末上で文字に色をつけるための制御文字列が生で表示されているだけです。 これが気になるなら、制御文字列を取り除くようなフィルタを通す必要があります。
補足
(1)「snmpdを起動中」の部分も化けています。Outlook Express でエンコードを手動で、utf8に変更すれば、「snmpdを起動中」の部分の文字化けがなくなります。だが、okの部分はまだ文字化けしています。今は手動で、エンコードを変更してほしくないです。どうすればいいですか。 (2)『制御文字列を取り除くようなフィルタを通す必要があります。』はどいうことですか。
- 774danger
- ベストアンサー率53% (1010/1877)
ヘッダに正しい文字コードが書かれていないか、そもそもヘッダがないかのどちらかでは? http://www.atmarkit.co.jp/fwin2k/win2ktips/711mailchar/mailchar.html 正しいヘッダを付けるか、↑に書かれているようにメーラ側で手動でエンコードを指定して読むかのどちらかでしょう
補足
Outlook Express でエンコードを手動で、utf8に変更すれば、「snmpdを起動中」の部分の文字化けがなくなります。だが、okの部分はまだ文字化けしています。今は手動で、エンコードを変更してほしくないです。どうすればいいですか。
お礼
すみません。初心者なので、例をあげてもいいですか。 (1)『全部がシェルスクリプトで、決まったパターンがあるなら、自動的に書き換えるようなコードを書いて使えば良いと思います。』の例
補足
そして、作業量が大きくなれば、このソースを修正する以外のやり方とかありますか。 よろしくお願いいたします。