email.charset: Darstellung von Zeichensätzen¶
Quellcode: Lib/email/charset.py
Dieses Modul ist Teil der Legacy-API (Compat32) für E-Mails. In der neuen API wird nur die Alias-Tabelle verwendet.
Der restliche Text in diesem Abschnitt ist die ursprüngliche Dokumentation des Moduls.
Dieses Modul stellt eine Klasse Charset zur Darstellung von Zeichensätzen und Zeichenkonvertierungen in E-Mail-Nachrichten bereit, sowie eine Registrierung von Zeichensätzen und mehrere Hilfsmethoden zur Manipulation dieser Registrierung. Instanzen von Charset werden in mehreren anderen Modulen innerhalb des email-Pakets verwendet.
Importieren Sie diese Klasse aus dem Modul email.charset.
- class email.charset.Charset(input_charset=DEFAULT_CHARSET)¶
Ordnet Zeichensätze ihren E-Mail-Eigenschaften zu.
Diese Klasse liefert Informationen über die Anforderungen, die für einen bestimmten Zeichensatz in E-Mails gelten. Sie bietet auch praktische Routinen für die Konvertierung zwischen Zeichensätzen, vorausgesetzt, die entsprechenden Codecs sind verfügbar. Gegeben einen Zeichensatz, wird sie ihr Bestes tun, um Informationen darüber zu liefern, wie dieser Zeichensatz in einer E-Mail-Nachricht RFC-konform verwendet werden kann.
Bestimmte Zeichensätze müssen mit quoted-printable oder base64 kodiert werden, wenn sie in E-Mail-Headern oder -Bodies verwendet werden. Bestimmte Zeichensätze müssen komplett konvertiert werden und sind in E-Mails nicht erlaubt.
Das optionale Argument input_charset ist wie unten beschrieben; es wird immer in Kleinbuchstaben umgewandelt. Nach der Alias-Normalisierung wird es auch als Lookup in der Registrierung von Zeichensätzen verwendet, um die Header-Kodierung, die Body-Kodierung und den Output-Konvertierungs-Codec zu ermitteln, der für den Zeichensatz verwendet werden soll. Wenn input_charset z. B.
iso-8859-1ist, werden Header und Bodies mit quoted-printable kodiert und es ist kein Output-Konvertierungs-Codec erforderlich. Wenn input_charseteuc-jpist, werden Header mit base64 kodiert, Bodies nicht kodiert, aber der Output-Text wird vom Zeichensatzeuc-jpin den Zeichensatziso-2022-jpkonvertiert.Instanzen von
Charsethaben die folgenden Datenattribute:- input_charset¶
Der anfänglich angegebene Zeichensatz. Gängige Aliase werden in ihre *offiziellen* E-Mail-Namen umgewandelt (z. B. wird
latin_1iniso-8859-1umgewandelt). Standardmäßig 7-Bitus-ascii.
- header_encoding¶
Wenn der Zeichensatz kodiert werden muss, bevor er in einem E-Mail-Header verwendet werden kann, wird dieses Attribut auf
charset.QP(für quoted-printable),charset.BASE64(für base64-Kodierung) odercharset.SHORTESTfür die kürzeste der QP- oder BASE64-Kodierungen gesetzt. Andernfalls ist esNone.
- body_encoding¶
Wie header_encoding, beschreibt aber die Kodierung für den Body der E-Mail-Nachricht, die tatsächlich von der Header-Kodierung abweichen kann.
charset.SHORTESTist für body_encoding nicht erlaubt.
- output_charset¶
Einige Zeichensätze müssen konvertiert werden, bevor sie in E-Mail-Headern oder -Bodies verwendet werden können. Wenn input_charset einer davon ist, enthält dieses Attribut den Namen des Zeichensatzes, zu dem der Output konvertiert wird. Andernfalls ist es
None.
- input_codec¶
Der Name des Python-Codecs, der verwendet wird, um den input_charset in Unicode zu konvertieren. Wenn kein Konvertierungs-Codec erforderlich ist, ist dieses Attribut
None.
- output_codec¶
Der Name des Python-Codecs, der verwendet wird, um Unicode in den output_charset zu konvertieren. Wenn kein Konvertierungs-Codec erforderlich ist, hat dieses Attribut denselben Wert wie input_codec.
Instanzen von
Charsethaben auch die folgenden Methoden:- get_body_encoding()¶
Gibt die für die Body-Kodierung verwendete Content-Transfer-Kodierung zurück.
Dies ist entweder der String
quoted-printableoderbase64, je nach verwendeter Kodierung, oder es ist eine Funktion. In diesem Fall sollten Sie die Funktion mit einem einzigen Argument aufrufen, dem Message-Objekt, das gerade kodiert wird. Die Funktion sollte dann den Header Content-Transfer-Encoding selbst auf das passende setzen.Gibt den String
quoted-printablezurück, wenn body_encodingQPist, gibt den Stringbase64zurück, wenn body_encodingBASE64ist, und gibt andernfalls den String7bitzurück.
- get_output_charset()¶
Gibt den Output-Zeichensatz zurück.
Dies ist das Attribut output_charset, wenn dieses nicht
Noneist, andernfalls ist es input_charset.
- header_encode(string)¶
Kodiert den String string für den Header.
Die Art der Kodierung (base64 oder quoted-printable) basiert auf dem Attribut header_encoding.
- header_encode_lines(string, maxlengths)¶
Kodiert einen string für den Header, indem er zuerst in Bytes konvertiert wird.
Dies ist ähnlich wie
header_encode(), mit dem Unterschied, dass der String an die maximalen Zeilenlängen angepasst wird, die durch das Argument maxlengths angegeben sind. maxlengths muss ein Iterator sein: jedes Element, das von diesem Iterator zurückgegeben wird, liefert die nächste maximale Zeilenlänge.
- body_encode(string)¶
Kodiert den String string für den Body.
Die Art der Kodierung (base64 oder quoted-printable) basiert auf dem Attribut body_encoding.
Die Klasse
Charsetbietet außerdem eine Reihe von Methoden zur Unterstützung von Standardoperationen und integrierten Funktionen.- __str__()¶
Gibt input_charset als String zurück, der in Kleinbuchstaben umgewandelt wurde.
__repr__()ist ein Alias für__str__().
Das Modul email.charset bietet auch die folgenden Funktionen zum Hinzufügen neuer Einträge zur globalen Registrierung von Zeichensätzen, Aliasen und Codecs:
- email.charset.add_charset(charset, header_enc=None, body_enc=None, output_charset=None)¶
Fügt Zeicheneigenschaften zur globalen Registrierung hinzu.
charset ist der Eingabezeichensatz und muss der kanonische Name eines Zeichensatzes sein.
Die optionalen Argumente header_enc und body_enc sind entweder
charset.QPfür quoted-printable,charset.BASE64für base64-Kodierung,charset.SHORTESTfür die kürzeste der quoted-printable- oder base64-Kodierung, oderNonefür keine Kodierung.SHORTESTist nur für header_enc gültig. Der Standardwert istNonefür keine Kodierung.Das optionale Argument output_charset ist der Zeichensatz, in dem der Output sein soll. Konvertierungen erfolgen vom Eingabezeichensatz über Unicode in den Ausgabezeichensatz, wenn die Methode
Charset.convert()aufgerufen wird. Der Standardwert ist die Ausgabe im selben Zeichensatz wie die Eingabe.Sowohl input_charset als auch output_charset müssen Unicode-Codec-Einträge in der Zeichenketten-zu-Codec-Zuordnung des Moduls haben; verwenden Sie
add_codec(), um Codecs hinzuzufügen, die dem Modul nicht bekannt sind. Weitere Informationen finden Sie in der Dokumentation des Modulscodecs.Die globale Zeichensatz-Registrierung wird im globalen Modul-Dictionary
CHARSETSgeführt.
- email.charset.add_alias(alias, canonical)¶
Fügt einen Alias für einen Zeichensatz hinzu. alias ist der Aliasname, z. B.
latin-1. canonical ist der kanonische Name des Zeichensatzes, z. B.iso-8859-1.Die globale Zeichensatz-Alias-Registrierung wird im globalen Modul-Dictionary
ALIASESgeführt.
- email.charset.add_codec(charset, codecname)¶
Fügt einen Codec hinzu, der Zeichen im angegebenen Zeichensatz nach und von Unicode abbildet.
charset ist der kanonische Name eines Zeichensatzes. codecname ist der Name eines Python-Codecs, wie er für das zweite Argument der
str-Methodeencode()geeignet ist.