【问题标题】:RoR encode mail subject from KOI8-R to UTF-8 doesn't workRoR 将邮件主题从 KOI8-R 编码为 UTF-8 不起作用
【发布时间】:2014-08-08 19:32:23
【问题描述】:

我在 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 >

为什么我的代码不起作用?

【问题讨论】:

    标签: ruby-on-rails ruby encoding utf-8


    【解决方案1】:

    举个例子:

    # 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)。

    【讨论】:

      猜你喜欢
      • 2013-07-19
      • 2017-07-15
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      相关资源
      最近更新 更多