我用郵件和名稱和主題有時候會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