2014-06-18 3 views
0

Ruby on Rails에서 우편 제목을 디코딩 할 때 문제가 있습니다. 나는 인코딩 메일 제목을하려고하면 "= KOI8-R B z9Qg09XQxdLXwcraxdLB =????" RoR이 KOI8-R에서 UTF-8로 메일 제목을 인코딩하지 않습니다.

<% 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

:

# 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 (루비 기본값)로 되돌아 올 것이다. KOI8_R로 가져 오려면 다시 인코딩 할 수 있습니다 (또는 위험하다고 생각되는 경우 .force_encoding).

관련 문제