- 2008/5/30 金曜日 2:58:51
- perl
はてブのほうでちょろっと書いたんだけど、
Mail::Sendmail でメール送信の以下のコードについて。
use Encode; use utf8; my $subject = "テスト"; my $message = "テストです。ほげほげ。"; foreach my $str ( $subject, $message ) { utf8::encode($str); Encode::from_to( $str, "utf8", "iso-2022-jp" ); }
ここでutf8::encode => Encode::from_toするのは冗長
encode('iso-2022-jp', $str);
だけでおk。
use utf8してなければ(で、ソースの文字コードがutf8であれば)
Encode::from_to( $str, "utf8", "iso-2022-jp" );
だけでおk。
http://b.hatena.ne.jp/kamawada/20080530#bookmark-8776610
encode('iso-2022-jp', $str); しても結局メールを送るときにutf8フラグを落とさなきゃいけないので
といってますがそれは勘違いかと・・・。
EncodeのPODのencodeの説明のところにも
the UTF8 flag for $octets is always off
とかかれていますし。
以下確認コードでっす。
#!/usr//bin/perl use strict; use utf8; use Encode; use Devel::Peek; my $str = 'あああいうえお'; print Dump($str); print Dump(simple_encode($str)); print Dump(encode_from_to($str)); sub simple_encode { my $str = shift; return encode('iso-2022-jp', $str); } sub encode_from_to { my $str = shift; $str = encode('utf8', $str); Encode::from_to($str, 'utf8' => 'iso-2022-jp'); return $str; }
結果はこちら
SV = PV(0x8151b00) at 0x815160c REFCNT = 1 FLAGS = (PADBUSY,PADMY,POK,pPOK,UTF8) PV = 0x81fefb0 "343201202343201202343201202343201204343201206343201210343201212"� [UTF8 "x{3042}x{3042}x{3042}x{3044}x{3046}x{3048}x{304a}"] CUR = 21 LEN = 24 SV = PVMG(0x81e1fc8) at 0x8230ca0 REFCNT = 1 FLAGS = (TEMP,POK,pPOK) IV = 0 NV = 0 PV = 0x8236630 "33$B$\"$\"$\"$$$&$($*33(B"� CUR = 20 LEN = 24 SV = PVMG(0x81e2028) at 0x8230ca0 REFCNT = 1 FLAGS = (TEMP,POK,pPOK) IV = 0 NV = 0 PV = 0x8236630 "33$B$\"$\"$\"$$$&$($*33(B"� CUR = 20 LEN = 24
ま、まったくおなじものですねー。
コメント:0
トラックバック:0
- この記事のトラックバック URL
- https://blog.everqueue.com/chiba/2008/05/30/25/trackback/
- トラックバックの送信元リスト
- perl-mongers.orgのメール送信の記事にちとつっこみ - へぼい日記 より