0

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 `==='

charset である uid_search の 2 番目のパラメーターを指定しても機能しません。

特殊文字のない件名は問題なく機能します。これを機能させる方法はありますか?

ありがとう。

4

1 に答える 1

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)

2つの可能性:

  1. # encoding: ascii-8bitスクリプトの先頭に追加します
  2. 文字列のエンコーディングを次のように強制しますascii-8bit

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

于 2013-03-19T13:58:27.463 に答える