email.charset: Representerar teckenuppsättningar

Källkod: Lib/email/charset.py


Denna modul är en del av det äldre (Compat32) e-post-API:et. I det nya API:et används endast aliastabellen.

Resterande text i detta avsnitt är modulens originaldokumentation.

Denna modul innehåller en klass Charset för att representera teckenuppsättningar och teckenuppsättningskonverteringar i e-postmeddelanden, samt ett teckenuppsättningsregister och flera bekvämlighetsmetoder för att manipulera detta register. Instanser av Charset används i flera andra moduler inom email-paketet.

Importera den här klassen från modulen email.charset.

class email.charset.Charset(input_charset=DEFAULT_CHARSET)

Mappa teckenuppsättningar till deras e-postegenskaper.

Denna klass ger information om de krav som ställs på e-post för en viss teckenuppsättning. Den innehåller också praktiska rutiner för konvertering mellan olika teckenuppsättningar, förutsatt att tillämpliga codecs finns tillgängliga. Givet en teckenuppsättning kommer den att göra sitt bästa för att tillhandahålla information om hur man använder den teckenuppsättningen i ett e-postmeddelande på ett RFC-kompatibelt sätt.

Vissa teckenuppsättningar måste kodas med quoted-printable eller base64 när de används i e-postens rubriker eller brödtexter. Vissa teckenuppsättningar måste konverteras direkt och är inte tillåtna i e-post.

Den valfria input_charset är som beskrivs nedan; den är alltid tvingad till gemener. Efter att ha aliasnormaliserats används det också som en uppslagning i registret över teckenuppsättningar för att ta reda på kodningen av rubriker, kodningen av textmassan och den codec för utdatakonvertering som ska användas för teckenuppsättningen. Om input_charset t.ex. är iso-8859-1 kodas rubriker och brödtexter med quoted-printable och ingen codec för utdatakonvertering behövs. Om input_charset är euc-jp kommer rubrikerna att kodas med base64, kropparna kommer inte att kodas, men utdatatexten kommer att konverteras från teckenuppsättningen euc-jp till teckenuppsättningen iso-2022-jp.

Charset-instanser har följande dataattribut:

input_charset

Den ursprungliga teckenuppsättningen som anges. Vanliga alias konverteras till deras officiella e-postnamn (t.ex. konverteras latin_1 till iso-8859-1). Standard är 7-bitars us-ascii.

header_encoding

Om teckenuppsättningen måste kodas innan den kan användas i ett e-posthuvud, kommer detta attribut att sättas till charset.QP (för quoted-printable), charset.BASE64 (för base64-kodning), eller charset.SHORTEST för den kortaste av QP- eller BASE64-kodning. Annars kommer det att vara None.

body_encoding

Samma som header_encoding, men beskriver kodningen för e-postmeddelandets kropp, som faktiskt kan vara annorlunda än rubrikens kodning. charset.SHORTEST är inte tillåtet för body_encoding.

output_charset

Vissa teckenuppsättningar måste konverteras innan de kan användas i e-postmeddelandenas rubriker eller brödtexter. Om input_charset är en av dem, kommer detta attribut att innehålla namnet på den teckenuppsättning som utdata ska konverteras till. Annars kommer det att vara None.

input_codec

Namnet på den Python-codec som används för att konvertera input_charset till Unicode. Om ingen konverteringscodec är nödvändig, kommer detta attribut att vara None.

output_codec

Namnet på den Python-codec som används för att konvertera Unicode till output_charset. Om ingen konverteringscodec är nödvändig kommer detta attribut att ha samma värde som input_codec.

Charset-instanser har också följande metoder:

get_body_encoding()

Returnerar den kodning för innehållsöverföring som används för kodning av body.

Detta är antingen strängen quoted-printable eller base64 beroende på vilken kodning som används, eller så är det en funktion, i vilket fall du bör anropa funktionen med ett enda argument, meddelandeobjektet som skall kodas. Funktionen bör sedan ställa in Content-Transfer-Encoding-rubriken själv till vad som är lämpligt.

Returnerar strängen quoted-printable om body_encoding är QP, returnerar strängen base64 om body_encoding är BASE64, och returnerar strängen 7bit annars.

get_output_charset()

Returnera den utgående teckenuppsättningen.

Detta är attributet output_charset om det inte är None, annars är det input_charset.

header_encode(string)

Header-kodar strängen string.

Typen av kodning (base64 eller quoted-printable) baseras på attributet header_encoding.

header_encode_lines(string, maxlengths)

Header-kodar en sträng genom att först konvertera den till bytes.

Detta liknar header_encode() förutom att strängen anpassas till maximala radlängder som anges av argumentet maxlengths, som måste vara en iterator: varje element som returneras från denna iterator ger nästa maximala radlängd.

body_encode(string)

Brödtextskodning av strängen string.

Typen av kodning (base64 eller quoted-printable) baseras på attributet body_encoding.

Klassen Charset innehåller också ett antal metoder för att stödja standardoperationer och inbyggda funktioner.

__str__()

Returnerar input_charset som en sträng med små bokstäver. __repr__() är ett alias för __str__().

__eq__(other)

Med den här metoden kan du jämföra två Charset-instanser för att se om de är lika.

__ne__(other)

Med den här metoden kan du jämföra två Charset-instanser för ojämlikhet.

Modulen email.charset innehåller även följande funktioner för att lägga till nya poster i de globala registren för teckenuppsättning, alias och codec:

email.charset.add_charset(charset, header_enc=None, body_enc=None, output_charset=None)

Lägg till teckenegenskaper i det globala registret.

charset är teckenuppsättningen för indata och måste vara det kanoniska namnet på en teckenuppsättning.

Valfria header_enc och body_enc är antingen charset.QP för quoted-printable, charset.BASE64 för base64-kodning, charset.SHORTEST för den kortaste av quoted-printable eller base64-kodning, eller None för ingen kodning. SHORTEST är endast giltigt för header_enc. Standardvärdet är None för ingen kodning.

Valfri output_charset är den teckenuppsättning som utdata ska vara i. Konverteringar kommer att fortsätta från indatans teckenuppsättning, till Unicode, till utdatans teckenuppsättning när metoden Charset.convert() anropas. Standardinställningen är att utdata ska vara i samma teckenuppsättning som indata.

Både input_charset och output_charset måste ha Unicode-codec-poster i modulens teckenuppsättning-till-codec-mappning; använd add_codec() för att lägga till codecs som modulen inte känner till. Se codecs-modulens dokumentation för mer information.

Det globala teckensnittsregistret finns i modulens globala ordbok CHARSETS.

email.charset.add_alias(alias, canonical)

Lägg till ett alias för teckenuppsättning. alias är aliasnamnet, t.ex. latin-1. canonical är teckenuppsättningens kanoniska namn, t.ex. iso-8859-1.

Registret över globala alias för teckensnittsinställningar finns i modulens globala ordbok ALIASES.

email.charset.add_codec(charset, codecname)

Lägg till en codec som mappar tecken i den angivna teckenuppsättningen till och från Unicode.

charset är det kanoniska namnet på en teckenuppsättning. codecname är namnet på en Python-codec, vilket är lämpligt för det andra argumentet till str:s encode()-metod.