perlでメール送信時の いわゆる波ダッシュ「〜」問題
今更ながらまた波ダッシュ問題で悩まされた。
波ダッシュ「〜」と全角マイナス「−」で文字化けが発生する。
これまた、Windowsの問題なわけで、マカーである自分にはなかなか気が付かない罠。
で、 perlの波ダッシュの文字コード変換のまとめ - (゚∀゚)o彡 sasata299's blog を読むと、UTF-8<=>SJIS、UTF-8<=>EUCが書かれているのだけれど、どうやらJISもEUCと同じ挙動をするらしい。
メール送信スクリプトで問題が起きるのはこれが原因か。
で、まとめのリンク先にあった Perlで日本語(ISO-2022-JP)メールを送信(まとめ) - 名古屋で働くWebプログラマの覚書 に、素晴らしい正規表現を発見。
「〜 ‖ − ¢ £ ¬」という文字化け発生原因の文字を置き換えられる。
$val =~ tr/[\x{ff5e}\x{2225}\x{ff0d}\x{ffe0}\x{ffe1}\x{ffe2}]/[\x{301c}\x{2016}\x{2212}\x{00a2}\x{00a3}\x{00ac}]/;
他にも機種依存文字が含まれていた場合の解決方法や、MIME::Lite で smtp送信する場合、Return-Pathを有効にする方法 などperlでメールを送信する際ハマるところの解説があります。
もうひとつの解決策
Encodeモジュールを使わずに Unicode::Japanese を使うという解決策。
多彩な機能に惹かれて以前は使っていたのたけれど、標準モジュールである Encode を使うほうが良いというような記事や、Encodeの方が動作が軽いという事でUnicode::Japaneseを使わなくなっていた。
波ダッシュ問題の解決にUnicode::Japaneseでおkなんて思いもしなかったのでこれからは文字コード変換処理はUnicode::Japaneseでいこうと思う。
-
前の記事
HTML::Feature のバグ user_agentの指定とnot_encodeオプション 2011.01.11
-
次の記事
CSSでテーブルの隙間を無くす 2011.01.13