我用邮件和名称和主题有时候会Q-编码的工作,像这样:有没有办法在Ruby中解码q编码的字符串?
=?UTF-8?Q?J=2E_Pablo_Fern=C3=A1ndez?=
有没有办法将它们在Ruby中进行解码? TMail似乎应该照顾它,但它并没有这样做。
我用邮件和名称和主题有时候会Q-编码的工作,像这样:有没有办法在Ruby中解码q编码的字符串?
=?UTF-8?Q?J=2E_Pablo_Fern=C3=A1ndez?=
有没有办法将它们在Ruby中进行解码? TMail似乎应该照顾它,但它并没有这样做。
我用这个来解析邮件主题:
你可以尝试以下方法:
str = "=?UTF-8?Q?J=2E_Pablo_Fern=C3=A1ndez?="
if m = /=\?([A-Za-z0-9\-]+)\?(B|Q)\?([!->@-~]+)\?=/i.match(str)
case m[2]
when "B" # Base64 encoded
decoded = Base64.decode64(m[3])
when "Q" # Q encoded
decoded = m[3].unpack("M").first.gsub('_',' ')
else
p "Could not find keyword!!!"
end
Iconv.conv('utf-8',m[1],decoded) # to convert to utf-8
end
+1不错,谢谢! – 2012-05-21 13:43:17
红宝石包括解码引用打印字符串的方法:
puts "Pablo_Fern=C3=A1ndez".unpack "M"
# => Pablo_Fernández
但是这似乎并没有在你的整个字符串(包括在开始=?UTF-8?Q?
部分工作,也许你可以从工作了。 。那里,虽然
我用'< br>'和'< div>'这样的东西。 – Dorian 2017-02-22 19:56:36
这是一个相当古老的问题,但TMail :: Unquoter(或其新的化身Mail :: Encodings)也可以完成这项工作。
TMail::Unquoter.unquote_and_convert_to(str, 'utf-8')
或
Mail::Encodings.unquote_and_convert_to(str, 'utf-8')
我得到了'<= br>'和'<= div>'这样的东西 – Dorian 2017-02-22 19:58:06
解码上的线每线的基础上:
line.unpack("M")
转换STDIN或编码的字符串的文件中提供输入到一个解码的输出:
if ARGV[0]
lines = File.read(ARGV[0]).lines
else
lines = STDIN.each_line.to_a
end
puts lines.map { |c| c.unpack("M") }.join
http://ruby-doc.org/stdlib-1.9.3/libdoc/uri/rdoc/URI。 html#method-c-decode_www_form – equivalent8 2016-03-22 18:37:43