我在Ruby on Rails中解决邮件主题问题。 我尝试编码邮件主题:“=?KOI8-R?B?z9Qg09XQxdLXwcraxdLB?=” 的 的
的<% if /koi8-r/ =~ msg.subject or /KOI8-R/ =~ msg.subject %>
<% subj = msg.subject.gsub(/=\?.*\?B\?/, '') %>
<% subj = subj.gsub(/\?=/, '') %>
<%= Base64.decode64(subj).force_encoding("KOI8-R").encode("UTF-8", :invalid=>:replace, :replace=>"?")
的 并得到错误: 不兼容的字符编码:ASCII-8BIT和UTF-8
但如果我在irb中这样做,一切正常: 的 的
的2.0.0p247 :009 > subj = "z9Qg09XQxdLXwcraxdLB"
=> "z9Qg09XQxdLXwcraxdLB"
2.0.0p247 :010 > Base64.decode64(subj).force_encoding("KOI8-R").encode("UTF-8", :invalid=>:replace, :replace=>"?")
=> "от супервайзера"
2.0.0p247 :011 >
的
为什么我的代码不起作用?
答案 0 :(得分:0)
举个例子:
# My starting string:
rus = "привет"
# generate fake email subject
require 'mail'
msg_subject = Mail::Encodings.decode_encode(rus.encode(Encoding::KOI8_R), :encode)
# => "=?KOI8-R?B?0NLJ18XU?="
Mail::Encodings.value_decode("=?KOI8-R?B?0NLJ18XU?=")
=> "привет"
这将以UTF-8(ruby默认值)返回。如果你想把它送到KOI8_R你可以再次编码(或者你感觉有风险,.force_encoding)。