我从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那么它就会吐出垃圾。
答案 0 :(得分:6)
字符串是ascii:非ascii标头在发送之前以ascii编码,以便它们可以安全地通过只能理解ascii的邮件服务器。 Q表示iso-2022字节使用quoted printable进行编码。
要解码的字节是
Auto-Asia-JP-1=1B$B$N$4M=3DLsFbMF$N3NG'=1B(B
Ruby可以通过.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のご予約内容の確認
虽然我不会说日语,但这可能是胡说八道。
您可能想要使用类似邮件gem的东西进行调查,它知道邮件标题的复杂性。