Python IMAPClient / imaplib搜索unicode问题 [英] Python IMAPClient/imaplib search unicode issue

查看:783
本文介绍了Python IMAPClient / imaplib搜索unicode问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用IMAPClient库,但在搜索时收到 UnicodeEncodeError 。下面是一个片段和堆栈跟踪:

  imap_client = imapclient.IMAPClient('imap.gmail.com',use_uid = True ,ssl = True)
imap_client.oauth2_login('john@example.com','xxx')
subject = u'Test \\\œ\\\∑\\\´\\\å\\\ß\\ \\ u2202'
from_email = u'john@example.com'
to_emails = [u'foo@example.com']
cc_emails = []
approx_date_sent = '05 - 2013年8月'

imap_client.select_folder(r'\发送')
search_criteria = [
u'FROM%s'%from_email,
u'SUBJECT %s'.encode('utf-8')%subject,
u'TO%s'%';'。join(to_emails)or'',
u'CC%s'%' ;'。join(cc_emails)or'',
u'SENTON%s'%approx_date_sent
]
msg_ids = imap_client.search(search_criteria,charset ='utf-8')






 'ascii'编解码器不能编码位置77-82中的字符:序号(128)
Traceback(最近一次调用的最后一次):
文件/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py ,第570行,发送
返回方法(* args,** kwargs)
文件/base/data/home/apps/s~app/dev.369284735686497536/imapapi.py,行269,后
to_emails = to_emails,cc_emails = cc_emails,approx_date_sent = approx_date_sent
文件/base/data/home/apps/s~app/dev.369284735686497536/utils/imap.py,行123,在search_message
msg_ids = imap_client.search(search_criteria,charset ='utf-8')
文件/base/data/home/apps/s~app/dev.369284735686497536/imapclient/imapclient .py,第569行,搜索
typ,data = self._imap.search(charset,* criteria)
文件/ base / data / home / runtimes / python27 / python27_dist / lib / python2 / base / data / home / runtimes中搜索.7 / imaplib.py,第625行,搜索
typ,dat = self._simple_command(名称,'CHARSET',charset,* criteria)
/ python27 /蟒蛇27_dist / lib / python2.7 / imaplib.py,第1070行,在_simple_command
中返回self._command_complete(name,self._command(name,* args))
文件/ base / data / home / runtimes / python27 / python27_dist / lib / python2.7 / imaplib.py,第857行,在_command
self.send('%s%s'%(data,CRLF))
File /base/data/home/runtimes/python27/python27_dist/lib/python2.7/imaplib.py,第1178行,发送
sent = self.sslobj.write(data)
文件 /base/data/home/runtimes/python27/python27_dist/lib/python2.7/ssl.py,第232行,写入
返回self._sslobj.write(data)
UnicodeEncodeError:'ascii '编解码器不能编码77-82位置的字符:序号不在范围内(128)

它似乎问题发生在 ssl.py oauth2_login

ssl = True >解决方案

尝试一下





它涵盖了utf-8以及iso-8859-1

I'm using the IMAPClient library, but I'm getting UnicodeEncodeError when doing a search. Below is a snippet and the stack trace:

imap_client = imapclient.IMAPClient('imap.gmail.com', use_uid=True, ssl=True)
imap_client.oauth2_login('john@example.com', 'xxx')
subject = u'Test \u0153\u2211\u00b4\u00e5\u00df\u2202'
from_email = u'john@example.com'
to_emails = [u'foo@example.com']
cc_emails = []
approx_date_sent = '05-Aug-2013'

imap_client.select_folder(r'\Sent')
search_criteria = [
   u'FROM %s' % from_email,
   u'SUBJECT %s'.encode('utf-8') % subject,
   u'TO %s' % ';'.join(to_emails) or '',
   u'CC %s' % ';'.join(cc_emails) or '',
   u'SENTON %s' % approx_date_sent
]
msg_ids = imap_client.search(search_criteria, charset='utf-8')


'ascii' codec can't encode characters in position 77-82: ordinal not in range(128)
Traceback (most recent call last):
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~app/dev.369284735686497536/imapapi.py", line 269, in post
    to_emails=to_emails, cc_emails=cc_emails, approx_date_sent=approx_date_sent
  File "/base/data/home/apps/s~app/dev.369284735686497536/utils/imap.py", line 123, in search_message
    msg_ids = imap_client.search(search_criteria, charset='utf-8')
  File "/base/data/home/apps/s~app/dev.369284735686497536/imapclient/imapclient.py", line 569, in search
    typ, data = self._imap.search(charset, *criteria)
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/imaplib.py", line 625, in search
    typ, dat = self._simple_command(name, 'CHARSET', charset, *criteria)
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/imaplib.py", line 1070, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/imaplib.py", line 857, in _command
    self.send('%s%s' % (data, CRLF))
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/imaplib.py", line 1178, in send
    sent = self.sslobj.write(data)
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/ssl.py", line 232, in write
    return self._sslobj.write(data)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 77-82: ordinal not in range(128)

It seems the issue happens in ssl.py? And ssl=True is needed for oauth2_login.

解决方案

Try this out

Python IMAP search using a subject encoded with iso-8859-1

It covers utf-8 as well as iso-8859-1

这篇关于Python IMAPClient / imaplib搜索unicode问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆