Perl - Encode::decode('MIME-Header', $value) の挙動について - Qiita
↑全く知りませんでした。
#!/usr/local/bin/perl use strict; use utf8; use Encode; use MIME::Words qw/decode_mimewords/; use Data::Dumper; my @SUBJECTS = ('=?ISO-2022-JP?B?GyRCJDMkbCRPGyhCTUlNRSBTVUJKRUNUGyRCJE4bKEJkb2Nv?= =?ISO-2022-JP?B?ZGUbJEIlRiU5JUhNUSRHJDkbKEI=?=', '=?utf-8?B?44Ku44Ks44K344ON44OeIHdpdGggVS1ORVhUIOOBiueUs+OB?= =?utf-8?B?l+i+vOOBv+WujOS6huOBruOBiuefpeOCieOBmw==?=' ); main(); exit(0); sub main { for my $subject_org ( @SUBJECTS ){ my $subject = MIME::Words::decode_mimewords($subject_org); #MIME::Words::decode_mimewords()は、表示の際のEncode::encode()が不要みたい print "MIME::Words::decode_mimewords ->", $subject,"\n"; $subject = Encode::decode('MIME-Header', $subject_org); print "Encode::decode -> ",Encode::encode('utf8',$subject),"\n\n"; } }
確かに↑こう書いたら、↓こう動きました
$ ./decode_mail_subject.pl MIME::Words::decode_mimewords ->これはMIME SUBJECTのdocodeテスト用です Encode::decode -> これはMIME SUBJECTのdocodeテスト用です MIME::Words::decode_mimewords ->ギガシネマ with U-NEXT お申し込み完了のお知らせ Encode::decode -> ギガシネマ with U-NEXT お申\xE3\x81\x97込み完了のお知らせ
参考までにMIMEなエンコードは、次の通り
#!/usr/local/bin/perl use strict; use utf8; use Encode; use Data::Dumper; main(); sub main { my $str_org = 'これはテストです'; my $str_2022 = Encode::encode('MIME-Header-ISO_2022_JP', $str_org); my $str_utf8 = Encode::encode('MIME-Header', $str_org); print '#### MIME-Header-ISO_2022_JP ####',"\n"; print encode('utf8',$str_org),"\n"; print "$str_2022\n"; print '#### MIME-Header ####',"\n"; print encode('utf8',$str_org),"\n"; print "$str_utf8\n"; }
↓実行結果
$ ./foo.pl #### MIME-Header-ISO_2022_JP #### これはテストです =?ISO-2022-JP?B?GyRCJDMkbCRPJUYlOSVIJEckORsoQg==?= #### MIME-Header #### これはテストです =?UTF-8?B?44GT44KM44Gv44OG44K544OI44Gn44GZ?=