【问题标题】:Ruby + Imap: searching a subject with special characters doesn't workRuby + Imap:搜索带有特殊字符的主题不起作用
【发布时间】:2013-03-18 14:03:51
【问题描述】:

使用 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 的第二个参数,即字符集,也不起作用。

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

谢谢。

【问题讨论】:

  • 你能把# encoding: utf-8 放在你正在实例化imap 对象的Ruby 脚本的顶部吗? (也许这是一个愚蠢的建议)
  • @SeamusAbshere 不幸的是,它会导致同样的错误。
  • 你的Encoding.default_external 是什么?
  • ruby-forum.com/topic/914604 修复了吗?
  • @SeamusAbshere Encoding.default_external 是 UTF-8。不,那个补丁不能修复它。我还尝试更新到 ruby​​ 1.9.3p392。一点运气都没有。

标签: ruby imap gmail-imap


【解决方案1】:

这复制了问题(使用与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'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    相关资源
    最近更新 更多