Unicode problem mit ImapClient

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
beatrix.w
User
Beiträge: 16
Registriert: Freitag 2. Mai 2014, 15:23

Ich bin Python-Newbie und habe ein kleines Unicode-Problem beim Verwenden der ImapClient-Library.

Ich steuere ein Python-Script aus meiner Xojo/Realbasic App, da es keine gute Imap-Library für Xojo/Realbasic gibt. ImapClient funktioniert sehr gut, bis auf das selektieren von Mailboxen mit Umlauten. Da bekomme ich für meine Testmailbox mit dem schönen Namen "mime mäils" immer die Fehlermeldung, daß die Mailbox nicht selektiert werden kann. Wenn ich das Script direkt in Pycharm ausführe, dann funktioniert es. Sogar im Terminal funktioniert es. Ich denke, das Problem kommt daher, mit welchem Encoding die Daten übergeben werden. Aber im Moment habe ich keine Idee, was Python da macht.

Mac OS 10.9, Python 2.7

Code: Alles auswählen

from __future__ import unicode_literals
from imapclient import IMAPClient
import sys
import base64
import string

if len(sys.argv) == 6:
   host = sys.argv[1] #’xxxx'
   username = sys.argv[2] #'xxxx'
   password = sys.argv[3] # 'xxxxx'
   password = base64.b64decode(password)
   ssl = sys.argv[4] # 'True
   mailbox = base64.b64decode(sys.argv[5])
else:
   host = ‘xxxxx'
   username = ‘xxxxxx'
   password = ‘xxxxx'
   mailbox = 'Ablage:::mime ma\u0308ils'
   ssl = True

imap_connection = IMAPClient(host, use_uid = False, ssl = ssl)
try:
   imap_connection.login(username, password)
   mailbox = string.replace(mailbox, ":::",  imap_connection.get_folder_delimiter())
   select_info = imap_connection.select_folder(mailbox)
   no_of_mails = select_info['EXISTS']
   print('noofmails' + str(no_of_mails))

except IMAPClient.Error, err:
   print 'error:' + str(err)
   exit
Wenn ich beim direkten Ausführen die folgende Zeile

Code: Alles auswählen

    mailbox = 'Ablage:::mime ma\u0308ils'
durch
    mailbox = 'Ablage:::mime m&AOQ-ils'
    mailbox = imap_utf7.decode(mailbox)
    mailbox = unicode(mailbox)
ersetze, dann funktioniert das Script auch nicht mit einer ähnlichen Fehlermeldung. Obwohl ich im Debugger sehe, daß mailbox den richtigen Wert und den richtigen Unicode-Typ hat.

Hat irgendjemand eine Idee, was ich hier falsch mache?

Grüße

Beatrix Willius
Zuletzt geändert von Anonymous am Samstag 3. Mai 2014, 09:46, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@beatrix.w: Du müsstest halt herausfinden in welcher Kodierung die Daten übergeben werden. Einmal wenn es klappt, und dann wie die Daten aussehen wenn es nicht klappt. Dann kannst Du ja vergleichen was unterschiedlich ist.

Führe das auf der Konsole aus und aus der Xojo/Realbasic-Anwendung und gib jeweils ``type(mailbox)`` und ``repr(mailbox)`` aus kurz bevor der Wert für `IMAPClient` verwendet wird. Was kommt dabei heraus?
beatrix.w
User
Beiträge: 16
Registriert: Freitag 2. Mai 2014, 15:23

Hallo Blackjack,

direktes Ausführen:

<type 'unicode'>
u'Ablage:::mime ma\u0308ils'

Von Xojo aus:

<type 'str'>
'Ablage:::mime ma\xcc\x88ils'

Aber wie bekomme ich die mailbox nach Unicode? Uff. Ich glaube, ich habe es: ich habe encode und decode verwechselt.

mailbox = mailbox.decode('utf8', 'ignore')

Danke für die Hilfe!

Grüße

Trixi
Antworten