ludio333 发表于 2013-04-19 18:16

ruby Net::IMAP中文的问题

终端是utf-8的
邮件标题有中文
这种方式解出来

返回的envelope.from.name => "=?GB2312?B?wfXQ+Q==?="

"\u0018\u001D纷`p}t>"
"\u0018\u001D纷`p}H4>"
类似这样



Encoding.default_external = Encoding::UTF_8

require 'net/imap'
require 'base64'

imap = Net::IMAP.new('imap.gmail.com', 993, true)
imap.login('user', 'pass')
imap.select('INBOX')
imap.search(["UNSEEN"]).each do |message_id|
envelope = imap.fetch(message_id, "ENVELOPE").attr["ENVELOPE"]
name = envelope.from.name
name =~ /.*?\?([^\?]+)\?(.*?)$/;
code = $1
name = Base64.decode64(name)
name.encode!('UTF-8',code)
p name.force_encoding("UTF-8")


end

shijiang1130 发表于 2013-04-20 14:28

require 'mail'
Mail::Encodings.value_decode(name)

看这个gem能解决你的问题不:mrgreen:

shijiang1130 发表于 2013-04-20 14:36

#coding: utf-8
require 'iconv'
require 'rubygems'
require 'net/imap'
require 'base64'
require 'mail'

imap = Net::IMAP.new('imap.gmail.com', 993, true)
imap.login('lookdata.cn', '606818.com')
imap.select('INBOX')
imap.search(["UNSEEN"]).each do |message_id|
envelope = imap.fetch(message_id, "ENVELOPE").attr["ENVELOPE"]
puts Mail::Encodings.value_decode("#{envelope.from.name}")
end

ludio333 发表于 2013-04-22 10:47

回复 3# shijiang1130


   之前一直不能上网,刚测试了一下, 貌似可以了,万分感谢,另外你的ruby版本是什么?

shijiang1130 发表于 2013-04-22 11:40

ruby 1.8.7 (2012-02-08 patchlevel 358)

ludio333 发表于 2013-04-22 17:18

回复 5# shijiang1130


    谢谢。
    我升级了一下1.9.3
页: [1]
查看完整版本: ruby Net::IMAP中文的问题