2010-08-13 5 views

답변

6

나는 이메일 과목을 구문 분석이 사용

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 
:

다음을 시도해 볼 수도 있습니다

+0

+1 니스, 고마워! –

3

루비 디코딩 인용 - 인쇄 가능한 문자열의 방법은,

puts "Pablo_Fern=C3=A1ndez".unpack "M" 
# => Pablo_Fernández 

을하지만 이것은 시작에 =?UTF-8?Q? 부분을 포함하여 전체 문자열 (작동하지 않는 것 어쩌면 당신은에서를 작업 할 수 있습니다. .이,하지만

+0

이걸 가지고 '< br>'과 '< div>'같은 것을 얻었습니다. – Dorian

1

이것은 꽤 오래된 질문이지만 TMail :: Unquoter (또는 새로운 화신 인 Mail :: Encodings)도 작업을 수행합니다.

TMail::Unquoter.unquote_and_convert_to(str, 'utf-8') 

또는

선 라인 당 기초
Mail::Encodings.unquote_and_convert_to(str, 'utf-8') 
+0

이걸로'<= br>'과'<= div>'같은 것을 얻었습니다. – Dorian

0

디코딩 :

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 
:

line.unpack("M") 

는 복호화 출력으로 STDIN 또는 인코딩 된 문자열 파일 제공된 입력 변환

관련 문제