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@:~$