2

iso-2022-jpのメールサーバーから文字列を取得していますが、UTFに変換できません。

sub #=> "=?iso-2022-jp?Q?Auto-Asia-JP-1=1B$B$N$4M=3DLsFbMF$N3NG'=1B(B?="
sub.encoding  #=> #<Encoding:US-ASCII>

Encoding::Converterを使ってみました。

ec = Encoding::Converter.new("ISO-2022-JP", "UTF-8")
ec.convert(sub)    #=> "=?iso-2022-jp?Q?Auto-Asia-JP-1=1B$B$N$4M=3DLsFbMF$N3NG'=1B(B?="

また、文字列の最初の部分、文字列の最後の部分、およびその間のすべての組み合わせを省略してみました。RubyはsubがASCIIだと思っていますが、force_encodingを使ってISO-2022-JPだと伝えようとすると、ゴミを吐き出します。

4

1 に答える 1

7

文字列はASCIIです。非ASCIIヘッダーは、送信される前にASCIIでエンコードされるため、ASCIIのみを理解するメールサーバーを安全に通過できます。Qは、iso-2022バイトがquotedprintableを使用してエンコードされていることを示します。

デコードするバイトは

Auto-Asia-JP-1=1B$B$N$4M=3DLsFbMF$N3NG'=1B(B

Rubyはquotedprintableをデコードでき.unpack("M").first.gsub('_',' ')ます。

Auto-Asia-JP-1\e$B$N$4M=LsFbMF$N3NG'\e(B

その後force_encoding('ISO-2022-JP').encode('UTF-8')、その文字列を 実行すると、

Auto-Asia-JP-1のご予約内容の確認

私は日本語を話せないので、それはナンセンスかもしれませんが。

メールヘッダーの複雑さをすべて知っているメールジェムのようなものを使用して調査することをお勧めします。

于 2013-01-10T17:43:27.640 に答える