我从我们的邮件服务器获取一个 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,那么它会吐出垃圾。
最佳答案
字符串为 ascii:非 ascii header 在发送前以 ascii 编码,以便它们可以安全地通过只理解 ascii 的邮件服务器。 Q 表示 iso-2022 字节使用带引号的可打印编码。
要解码的字节是
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')
然后我在那个字符串上得到 p>
Auto-Asia-JP-1のご予約内容の確認
虽然我不会说日语所以这很可能是胡说八道。
您可能想使用诸如 mail gem 之类的东西进行调查,它了解邮件 header 的所有复杂性。
关于ruby - 在 ruby 中从 iso-2022-jp 转换为 UTF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14262283/