Ich habe kürzlich eingehende E-Mails für eine Anwendung implementiert und Junge, habe ich die Tore der Hölle geöffnet? Seitdem kommt jeden zweiten Tag eine E-Mail an, die dazu führt, dass die App auf andere Weise fehlschlägt.
Eines dieser Dinge sind E-Mails, die als UTF-7 codiert sind. Die meisten E-Mails kommen als ASCII, einige der lateinischen Kodierungen oder zum Glück als UTF-8.
Hotmail-Fehlermeldungen (wie E-Mail-Adresse nicht vorhanden oder Kontingent überschritten) scheinen als UTF-7 zu kommen. Leider ist UTF-7 keine Kodierung, die Ruby versteht:
> "hello world".encode("utf-8", "utf-7")
Encoding::ConverterNotFoundError: code converter not found (UTF-7 to UTF-8)
> Encoding::UTF_7
=> #<Encoding:UTF-7 (dummy)>
Meine Anwendung stürzt nicht ab, sie verarbeitet die E-Mail tatsächlich recht gut, sendet mir jedoch eine Benachrichtigung über den möglichen Fehler.
Ich habe einige Zeit gegoogelt und kann niemanden finden, der die Konvertierung implementiert hat, zumindest nicht als Ruby 1.9.3 Encoding :: Converter.
Meine Frage ist also, wie relevant ist diese Codierung, da ich in UTF-7 nie eine E-Mail mit tatsächlichem Inhalt von einer tatsächlichen Person erhalten habe? kann ich es sicher ignorieren?
Antworten:
Das einzige relevante Merkmal von UTF-7 (zum Beispiel über UTF-8) ist, dass es eine 7-Bit-Codierung ist, genau wie es gutes altes ASCII ist. Das bedeutet, dass es über ein System funktioniert, das nicht 8-Bit sauber ist .
Das einzige große System, bei dem dies heute noch wichtig ist, sind Mailserver (fragen Sie mich nicht, warum sie dieses Problem vor 10 bis 20 Jahren nicht behoben haben, die meisten Server haben es getan, aber einige haben es angeblich immer noch nicht getan).
Also: UTF-7 wird nur in E-Mail-Systemen relevant sein. Überall sonst ist UTF-8 die bessere Wahl.
quelle
Dank des Kommentars von Charles Salvia habe ich im IMAP-Modul eine Methode gefunden, die mir geholfen hat:
quelle