Ruby + Imap:使用特殊字符搜索主题不起作用

时间:2013-03-18 14:03:52

标签: ruby imap gmail-imap

使用Ruby + IMAP并尝试使用特殊字符搜索主题时:

imap.uid_search(['SUBJECT', subject, 'NOT', 'SEEN'])

当主题是“Olá”时,它将失败:

Encoding::CompatibilityError: incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)
from /Users/fernando/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/net/imap.rb:1266:in `==='

指定uid_search的第二个参数,即charset,也不起作用。

没有特殊字符的主题可以正常工作。有没有办法使这项工作?

感谢。

1 个答案:

答案 0 :(得分:2)

这会复制问题(与net/imap使用的正则表达式相同):

# encoding: ascii-8bit
a = /[\x80-\xff\r\n]/n
a =~ "olá".force_encoding('utf-8') # incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string) (Encoding::CompatibilityError)

两种可能性:

  1. # encoding: ascii-8bit添加到脚本顶部
  2. 强制将字符串的编码转移到ascii-8bit

    imap.uid_search(['SUBJECT',subject.force_encoding('ascii-8bit'),'NOT','SEEN'])