18.1.6. email.charset:文字セットの表現—Pythonドキュメント
18.1.6。 email.charset :文字セットを表す
このモジュールは、電子メールメッセージで文字セットと文字セット変換を表すためのクラス Charset 、文字セットレジストリ、およびこのレジストリを操作するためのいくつかの便利なメソッドを提供します。 Charset のインスタンスは、 email パッケージ内の他のいくつかのモジュールで使用されます。
このクラスを email.charset モジュールからインポートします。
バージョン2.2.2の新機能。
- class email.charset.Charset([input_charset])
文字セットを電子メールプロパティにマップします。
このクラスは、特定の文字セットの電子メールに課せられる要件に関する情報を提供します。 また、該当するコーデックが利用できる場合、文字セット間で変換するための便利なルーチンも提供します。 文字セットを指定すると、RFC準拠の方法で電子メールメッセージでその文字セットを使用する方法に関する情報を提供するために最善を尽くします。
特定の文字セットは、電子メールのヘッダーまたは本文で使用する場合、quoted-printableまたはbase64でエンコードする必要があります。 特定の文字セットは完全に変換する必要があり、電子メールでは許可されていません。
オプションの input_charset は以下のとおりです。 常に小文字に強制変換されます。 エイリアスで正規化された後、文字セットのレジストリを検索して、文字セットに使用されるヘッダーエンコーディング、本文エンコーディング、および出力変換コーデックを見つけるためにも使用されます。 たとえば、 input_charset が
iso-8859-1
の場合、ヘッダーと本文はquoted-printableを使用してエンコードされ、出力変換コーデックは必要ありません。 input_charset がeuc-jp
の場合、ヘッダーはbase64でエンコードされ、本文はエンコードされませんが、出力テキストはeuc-jp
文字セットからiso-2022-jp
文字セット。Charset インスタンスには、次のデータ属性があります。
- input_charset
指定された初期文字セット。 一般的なエイリアスは、公式メール名に変換されます(例:
latin_1
はiso-8859-1
に変換されます。 デフォルトは7ビットus-ascii
です。
- header_encoding
電子メールヘッダーで使用する前に文字セットをエンコードする必要がある場合、この属性は
Charset.QP
(quoted-printableの場合)、Charset.BASE64
(base64エンコードの場合)、または[ X179X] は、最短のQPまたはBASE64エンコーディングです。 それ以外の場合は、None
になります。
- body_encoding
header_encoding と同じですが、メールメッセージの本文のエンコーディングを記述します。これは、実際にはヘッダーエンコーディングとは異なる場合があります。
Charset.SHORTEST
は、 body_encoding では許可されていません。
- output_charset
一部の文字セットは、電子メールのヘッダーまたは本文で使用する前に変換する必要があります。 input_charset がそれらの1つである場合、この属性には、出力が変換される文字セットの名前が含まれます。 それ以外の場合は、
None
になります。
- input_codec
input_charset をUnicodeに変換するために使用されるPythonコーデックの名前。 変換コーデックが必要ない場合、この属性は
None
になります。
- output_codec
Unicodeを output_charset に変換するために使用されるPythonコーデックの名前。 変換コーデックが必要ない場合、この属性は input_codec と同じ値になります。
Charset インスタンスにも次のメソッドがあります。
- get_body_encoding()
ボディエンコーディングに使用されるコンテンツ転送エンコーディングを返します。
これは、使用するエンコードに応じて文字列
quoted-printable
またはbase64
のいずれかであるか、関数です。この場合、単一の引数を使用して関数を呼び出す必要があります。メッセージオブジェクトはエンコードされます。 次に、関数は Content-Transfer-Encoding ヘッダー自体を適切なものに設定する必要があります。body_encoding が
QP
の場合は文字列quoted-printable
を返し、 body_encoding がBASE64
の場合は文字列base64
を返します。それ以外の場合は、文字列7bit
を返します。
- convert(s)
文字列 s を input_codec から output_codec に変換します。
- to_splittable(s)
マルチバイトの可能性のある文字列を安全に分割可能な形式に変換します。 s は分割する文字列です。
input_codec を使用して文字列をUnicodeに変換しようとするため、文字境界で安全に分割できます(マルチバイト文字の場合でも)。
input_charset を使用して s をUnicodeに変換する方法がわからない場合は、文字列をそのまま返します。
Unicodeに変換できなかった文字は、Unicode置換文字
'U+FFFD'
に置き換えられます。
- from_splittable(ustr[, to_output])
分割可能な文字列をエンコードされた文字列に変換し直します。 ustr は、「分割解除」するためのUnicode文字列です。
このメソッドは、適切なコーデックを使用して、文字列をUnicodeからエンコードされた形式に変換し直そうとします。 Unicodeでない場合、またはUnicodeから変換できなかった場合は、文字列をそのまま返します。
Unicodeから変換できなかった文字は、適切な文字(通常は
'?'
)に置き換えられます。to_output が
True
(デフォルト)の場合、 output_codec を使用してエンコードされた形式に変換します。 to_output がFalse
の場合、 input_codec を使用します。
- get_output_charset()
出力文字セットを返します。
これは、
None
でない場合は、 output_charset 属性です。それ以外の場合は、 input_charset です。
- encoded_header_len()
エンコードされたヘッダー文字列の長さを返し、quoted-printableまたはbase64エンコードを適切に計算します。
- header_encode(s[, convert])
文字列 s をヘッダーエンコードします。
convert が
True
の場合、文字列は入力文字セットから出力文字セットに自動的に変換されます。 これは、行長の問題があるマルチバイト文字セットには役立ちません(マルチバイト文字は、バイト境界ではなく、文字で分割する必要があります)。 これらの問題に対処するには、上位レベルの Header クラスを使用します( email.header を参照)。 convert のデフォルトはFalse
です。エンコーディングのタイプ(base64またはquoted-printable)は、 header_encoding 属性に基づきます。
- body_encode(s[, convert])
文字列 s を本文エンコードします。
convert が
True
(デフォルト)の場合、文字列は入力文字セットから出力文字セットに自動的に変換されます。 header_encode()とは異なり、電子メール本文のバイト境界とマルチバイト文字セットに問題はないため、これは通常かなり安全です。エンコーディングのタイプ(base64またはquoted-printable)は、 body_encoding 属性に基づきます。
Charset クラスは、標準操作と組み込み関数をサポートするための多数のメソッドも提供します。
- __str__()
input_charset を小文字に強制変換された文字列として返します。
__repr__()
は、 __ str __()のエイリアスです。
- __eq__(other)
このメソッドを使用すると、2つの Charset インスタンスが等しいかどうかを比較できます。
- __ne__(other)
このメソッドを使用すると、2つの Charset インスタンスの不等式を比較できます。
email.charset モジュールは、グローバル文字セット、エイリアス、およびコーデックレジストリに新しいエントリを追加するための次の関数も提供します。
- email.charset.add_charset(charset[, header_enc[, body_enc[, output_charset]]])
文字のプロパティをグローバルレジストリに追加します。
charset は入力文字セットであり、文字セットの正規名である必要があります。
オプションの header_enc および body_enc は、quoted-printableの場合は
Charset.QP
、base64エンコーディングの場合はCharset.BASE64
、quotedの最短の場合はCharset.SHORTEST
のいずれかです。 -printableまたはbase64エンコーディング、またはエンコーディングなしの場合はNone
。SHORTEST
は、 header_enc に対してのみ有効です。 エンコードなしの場合、デフォルトはNone
です。オプションの output_charset は、出力が含まれるべき文字セットです。 メソッド Charset.convert()が呼び出されると、変換は入力文字セットからUnicode、出力文字セットに進みます。 デフォルトでは、入力と同じ文字セットで出力されます。
input_charset と output_charset の両方で、モジュールの文字セットからコーデックへのマッピングにUnicodeコーデックエントリが必要です。 add_codec()を使用して、モジュールが認識していないコーデックを追加します。 詳細については、コーデックモジュールのドキュメントを参照してください。
グローバル文字セットレジストリは、モジュールグローバルディクショナリ
CHARSETS
に保持されます。
- email.charset.add_alias(alias, canonical)
文字セットエイリアスを追加します。 alias はエイリアス名です。例:
latin-1
。 canonical は、文字セットの正規名です。例:iso-8859-1
。グローバル文字セットエイリアスレジストリは、モジュールグローバルディクショナリ
ALIASES
に保持されます。
- email.charset.add_codec(charset, codecname)
指定された文字セットの文字をUnicodeとの間でマップするコーデックを追加します。
charset は、文字セットの正規名です。 codecname は、組み込みの unicode()またはUnicode文字列の
encode()
メソッドの2番目の引数に適切な、Pythonコーデックの名前です。 。