email.charset
: Αναπαράσταση συνόλων χαρακτήρων¶
Πηγαίος κώδικας: Lib/email.charset.py
Αυτό το module αποτελεί μέρος του παλιού API (Compat32
) του email. Στο νέο API, χρησιμοποιείται μόνο ο πίνακας των ψευδωνύμων.
Το υπόλοιπο κείμενο σε αυτή την ενότητα είναι η αρχική τεκμηρίωση του module.
Αυτό το module παρέχει την κλάση Charset
για την αναπαράσταση των συνόλων χαρακτήρων και των μετατροπών τους σε μηνύματα email, καθώς και ένα μητρώο συνόλων χαρακτήρων και διάφορες βοηθητικές μεθόδους για τη διαχείρισή του. Τα στιγμιότυπα της Charset
χρησιμοποιούνται σε αρκετά άλλα modules εντός του πακέτου email
.
Εισάγετε αυτή την κλάση από το module email.charset
.
- class email.charset.Charset(input_charset=DEFAULT_CHARSET)¶
Αντιστοίχιση συνόλων χαρακτήρων στις ιδιότητες τους στο email.
Αυτή η κλάση παρέχει πληροφορίες σχετικά με τις απαιτήσεις που επιβάλλονται σε ένα email για ένα συγκεκριμένο σύνολο χαρακτήρων. Παρέχει επίσης βοηθητικές ρουτίνες για την μετατροπή μεταξύ συνόλων χαρακτήρων, εφόσον είναι διαθέσιμα τα αντίστοιχα codecs. Δεδομένου ενός συνόλου χαρακτήρων, θα προσπαθήσει να παρέχει πληροφορίες σχετικά με τον τρόπο χρήσης του σε ένα email με τρόπο συμβατό με το RFC.
Ορισμένα σύνολα χαρακτήρων πρέπει να κωδικοποιούνται με quoted-printable ή base64 όταν χρησιμοποιούνται σε κεφαλίδες ή σώματα email. Ορισμένα σύνολα χαρακτήρων πρέπει να μετατραπούν πλήρως και δεν επιτρέπονται στα email.
Το προαιρετικό input_charset περιγράφεται παρακάτω· μετατρέπεται πάντα σε πεζά. Μετά την κανονικοποίηση ψευδωνύμων, χρησιμοποιείται επίσης ως αναζήτηση στο μητρώο των συνόλων χαρακτήρων για να προσδιορίσει την κωδικοποίηση κεφαλίδας, την κωδικοποίηση σώματος και τον κωδικοποιητή μετατροπής εξόδου που θα χρησιμοποιηθεί για το σύνολο χαρακτήρων. Για παράδειγμα, εάν το input_charset είναι
iso-8859-1
, τότε οι κεφαλίδες και τα σώματα θα κωδικοποιηθούν χρησιμοποιώντας quoted-printable και δεν απαιτείται codec μετατροπής εξόδου. Εάν το input_charset είναιeuc-jp
, τότε οι κεφαλίδες θα κωδικοποιηθούν με base64, τα σώματα δεν θα κωδικοποιηθούν, αλλά το κείμενο εξόδου θα μετατραπεί από το σύνολο χαρακτήρωνeuc-jp
στοiso-2022-jp
.Στιγμιότυπα της κλάσης
Charset
έχουν τα ακόλουθα χαρακτηριστικά δεδομένων:- input_charset¶
Το αρχικό σύνολο χαρακτήρων καθορίζεται. Τα κοινά ψευδώνυμα μετατρέπονται στα επίσημα ονόματα τους για το email (π.χ. το
latin_1
μετατρέπεται σεiso-8859-1
). Προεπιλογή είναι το 7-bitus-ascii
.
- header_encoding¶
Εάν το σύνολο χαρακτήρων πρέπει να κωδικοποιηθεί πριν χρησιμοποιηθεί σε κεφαλίδα email, αυτό το χαρακτηριστικό θα οριστεί σε
charset.QP
(για quoted-printable),charset.BASE64
(για κωδικοποίηση base64), ήcharset.SHORTEST
για την πιο σύντομη κωδικοποίηση από QP ή BASE64. Διαφορετικά, θα είναιNone
.
- body_encoding¶
Ίδιο με το header_encoding, αλλά περιγράφει την κωδικοποίηση για το σώμα του μηνύματος email, το οποίο μπορεί να είναι διαφορετικό από την κωδικοποίηση της κεφαλίδας. Η τιμή
charset.SHORTEST
δεν επιτρέπεται για το body_encoding.
- output_charset¶
Ορισμένα σύνολα χαρακτήρων πρέπει να μετατραπούν πριν χρησιμοποιηθούν σε κεφαλίδες ή σώματα email. Αν το input_charset είναι ένα από αυτά, αυτό το χαρακτηριστικό θα περιέχει το όνομα του συνόλου χαρακτήρων στο οποίο θα μετατραπεί η έξοδος. Αλλιώς, θα είναι
None
.
- input_codec¶
Το όνομα του Python codec που χρησιμοποιείται για την μετατροπή του input_charset σε Unicode. Αν δεν απαιτείται codec μετατροπής, αυτό το χαρακτηριστικό θα είναι
None
.
- output_codec¶
Το όνομα του Python codec που χρησιμοποιείται για την μετατροπή του Unicode στο output_charset. Αν δεν απαιτείται codec μετατροπής, αυτό το χαρακτηριστικό θα έχει την ίδια τιμή με το input_codec.
Στιγμιότυπα της κλάσης
Charset
διαθέτουν επίσης τις εξής μεθόδους:- get_body_encoding()¶
Επιστρέφει τον κωδικοποιητή μεταφοράς περιεχομένου που χρησιμοποιείται για την κωδικοποίηση του σώματος.
Αυτή είναι είτε η συμβολοσειρά
quoted-printable
ήbase64
, ανάλογα με την κωδικοποίηση που χρησιμοποιείται, είτε είναι μια συνάρτηση, οπότε πρέπει να καλέσετε τη συνάρτηση με ένα μόνο όρισμα, το αντικείμενο Message που κωδικοποιείται. Η συνάρτηση θα πρέπει στη συνέχεια να ορίσει την κεφαλίδα Content-Transfer-Encoding η ίδια, σε ότι είναι κατάλληλο.Επιστρέφει την συμβολοσειρά
quoted-printable
αν το body_encoding είναιQP
, επιστρέφει την συμβολοσειράbase64
αν το body_encoding είναιBASE64
, και επιστρέφει την συμβολοσειρά7bit
διαφορετικά.
- get_output_charset()¶
Επιστρέφει το σύνολο χαρακτήρων εξόδου.
Αυτό είναι το χαρακτηριστικό output_charset αν δεν είναι
None
, διαφορετικά είναι το input_charset.
- header_encode(string)¶
Κωδικοποιεί την κεφαλίδα της συμβολοσειράς string.
Ο τύπος κωδικοποίησης (base64 ή quoted-printable) θα βασίζεται στο χαρακτηριστικό header_encoding.
- header_encode_lines(string, maxlengths)¶
Κωδικοποιεί την κεφαλίδα μιας συμβολοσειράς string μετατρέποντας το πρώτα σε bytes.
Αυτό είναι παρόμοιο με την μέθοδο
header_encode()
, εκτός από το ότι το string τοποθετείται στις μέγιστες γραμμές μήκους που δίνονται από το όρισμα maxlengths, το οποίο πρέπει να είναι ένας iterator: κάθε στοιχείο που επιστρέφεται από αυτόν τον iterator θα παρέχει το επόμενο μέγιστο μήκος γραμμής.
- body_encode(string)¶
Κωδικοποίηση σώματος της συμβολοσειράς string.
Ο τύπος κωδικοποίησης (base64 ή quoted-printable) θα βασίζεται στο χαρακτηριστικό body_encoding.
Η κλάση
Charset
παρέχει επίσης αρκετές μεθόδους για να υποστηρίξει τις τυπικές λειτουργίες και τις ενσωματωμένες συναρτήσεις.- __str__()¶
Επιστρέφει το input_charset ως συμβολοσειρά που έχει μετατραπεί σε πεζά. Η μέθοδος
__repr__()
είναι ένα ψευδώνυμο για την μέθοδο__str__()
.
Το module email.charset
παρέχει επίσης τις εξής συναρτήσεις για προσθήκη νέων καταχωρήσεων στις καθολικά μητρώα συνόλων χαρακτήρων, ψευδωνύμων και κωδικοποιητών:
- email.charset.add_charset(charset, header_enc=None, body_enc=None, output_charset=None)¶
Προσθέστε ιδιότητες χαρακτήρων στο καθολικό μητρώο.
Το charset είναι το σύνολο χαρακτήρων εισόδου, και πρέπει να είναι το κανονικό όνομα ενός συνόλου χαρακτήρων.
Προαιρετικά το header_enc και body_enc είναι είτε
charset.QP
για κωδικοποίηση quoted-printable,charset.BASE64
για κωδικοποίηση base64,charset.SHORTEST
για την πιο σύντομη από τις κωδικοποιήσεις quoted-printable ή base64, ήNone
για καμία κωδικοποίηση. ΤοSHORTEST
είναι έγκυρο μόνο για το header_enc. Η προεπιλογή είναιNone
για καμία κωδικοποίηση.Προαιρετικό output_charset είναι το σύνολο χαρακτήρων στο οποίο θα πρέπει να βρίσκεται η έξοδος. Οι μετατροπές θα γίνονται από το εισερχόμενο σύνολο χαρακτήρων, σε Unicode, και στη συνέχεια στο σύνολο χαρακτήρων εξόδου όταν καλείται η μέθοδος
Charset.convert()
. Η προεπιλογή είναι να εξάγεται το ίδιο σύνολο χαρακτήρων με το εισερχόμενο.Τόσο το input_charset όσο και το output_charset πρέπει να έχουν καταχωρίσεις Unicode codec στη χαρτογράφηση χαρακτήρων προς codec του module· χρησιμοποιήστε την συνάρτηση
add_codec()
για να προσθέσετε codecs που το module δεν γνωρίζει. Δείτε την τεκμηρίωση του modulecodecs
για περισσότερες πληροφορίες.Το καθολικό μητρώο συνόλων χαρακτήρων διατηρείται στο καθολικό dictionary του module
CHARSETS
.
- email.charset.add_alias(alias, canonical)¶
Προσθέστε ένα ψευδώνυμο συνόλου χαρακτήρων. Το alias είναι το όνομα του ψευδωνύμου, π.χ.
latin-1
. Το canonical είναι το κανονικό όνομα του συνόλου χαρακτήρων, π.χ.iso-8859-1
.Το παγκόσμιο μητρώο ψευδωνύμων συνόλων χαρακτήρων διατηρείται στο καθολικό λεξικό του module
ALIASES
.
- email.charset.add_codec(charset, codecname)¶
Προσθέστε έναν κωδικοποιητή που αντιστοιχεί χαρακτήρες από το δεδομένο σύνολο χαρακτήρων προς και από Unicode.
Το charset είναι το κανονικό όνομα ενός συνόλου χαρακτήρων. Το codecname είναι το όνομα ενός κωδικοποιητή Python, ως κατάλληλο για το δεύτερο όρισμα της μεθόδου
encode()
της κλάσηςstr
.