それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ruby でメールのQuoted-Printableをデコード

rubyでメールの本文の日本語部分デコードしようとした。7bitかとおもたらQuoted-Printable。なにこれどうするの、と思って調べました

unpack が妥当

str.unpack('M')

デコード例

>> str=> "=F9=97=82=B1=82=F1=82=C9=82=BF=82=CD"
>> str.unpack('M')
=> ["\xF9\x97\x82\xB1\x82\xF1\x82\xC9\x82\xBF\x82\xCD"]
>> str.unpack('M').first.force_encoding('sjis')
=> "\x{F997}\x{82B1}\x{82F1}\x{82C9}\x{82BF}\x{82CD}"
>> str.unpack('M').first.force_encoding('sjis').encode('utf-8')
=> "?こんにちは"
>>

MIME base64か、7bit かと思ってたらquoted-printableでした

Content-Transfer-Encoding: quoted-printable

を確認して、デコードすることがポイント

ちなみに、元になったメール

メール本文

Return-Path: <takuya@example.biz>
Received: from [192.168.2.2] (.xgsnun51.imtp.tachikawa.mopera.net. [27.229.196.226])
        by mx.google.com with ESMTPS id ip8sm673750pbc.36..12.04.00.5515
        (version=TLSv1/SSLv3 cipher=OTHER);
        Tue, 04 Dec 2012 00:55:16 -0800 (PST)
From:  takuya <takuya@example.biz>
Content-Type: text/plain;
     charset=Shift_JIS
X-Mailer: iPhone Mail (9B208)
Message-Id: <7EF67606-40C0-4D36-96E3-@example.biz>
Date: Tue, 4 Dec 2012 17:55:11 +0900
To: takuya  <takuya@example.biz>
Content-Transfer-Encoding: quoted-printable
Mime-Version: 1.0 (1.0)

=F9=97=82=B1=82=F1=82=C9=82=BF=82=CD

Sent from my iPhone=

追記 2017-07-20

nkf で出来る

takuya@:~$ echo  こんにちは! | nkf -MQ
=E3=81=93=E3=82=93=E3=81=AB=E3=81=A1=E3=81=AF=EF=BC=81
takuya@:~$
takuya@:~$ echo こんにちは! | nkf -MQ  | nkf -mQW
こんにちは!
takuya@:~$