end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

MIME::QuotedPrint for perl による Quoted-Printable エンコーディング

http://search.cpan.org/perldoc?Email%3A%3AStuffer

http://search.cpan.org/perldoc?Email%3A%3AMIME

Email::Stuffer & Email::MIME を読んでたら、Email::MIME では、encoding に base64 or quoted-printable or 8bit を指定できるらしい。

quoted-printable (いわゆる QP encoding)は利用したことがなかったので、お試し。

quoted-printable encodingとは?

BASE64との違い等と合せて、ググった方が理解しやすいと思いますので、 ここでは記載しません。

MIME::QuotedPrint

perlで QP encoding するには、MIME::QuotedPrint を利用するよう。 しかも、標準module

http://perldoc.perl.org/MIME/QuotedPrint.html

$ corelist MIME::QuotedPrint
Data for 2014-10-01
MIME::QuotedPrint was first released with perl v5.7.3

$ corelist MIME::Base64;
Data for 2014-10-01
MIME::Base64 was first released with perl v5.7.3

MIME::QuotedPrint のお試し

#!/usr/local/bin/perl
use strict;
use warnings;
use utf8;
use Encode;
use MIME::QuotedPrint;

main();

sub main {
    for my $char_org ('1','A','+','=','あ','あA','あい','α','㈱'){
        my $char_org_utf8 = Encode::encode('utf8',$char_org);

        my $encoded = MIME::QuotedPrint::encode_qp( $char_org_utf8 );
        my $decoded = MIME::QuotedPrint::decode_qp($encoded);

        print join(" -> ", $char_org_utf8, $encoded, $decoded),"\n\n";
    }
}

↑こう書くと、↓こう表示されます。

$ ./test.pl 
1 -> 1=
 -> 1

A -> A=
 -> A

+ -> +=
 -> +

= -> =3D=
 -> =

あ -> =E3=81=82=
 -> あ

あA -> =E3=81=82A=
 -> あA

あい -> =E3=81=82=E3=81=84=
 -> あい

α -> =CE=B1=
 -> α

㈱ -> =E3=88=B1=
 -> ㈱

「encode_qp()」された文字列の最後には、改行文字が追加されるみたい。