- 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のメール送信の記事にちとつっこみ - へぼい日記 より