コーデック—コーデックレジストリと基本クラス—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/codecs
移動先:案内検索

codecs —コーデックレジストリと基本クラス

ソースコード: :source: `Lib / codecs.py`



このモジュールは、標準のPythonコーデック(エンコーダーとデコーダー)の基本クラスを定義し、コーデックとエラー処理のルックアッププロセスを管理する内部Pythonコーデックレジストリへのアクセスを提供します。 ほとんどの標準コーデックはテキストエンコーディングで、テキストをバイトにエンコードしますが、テキストをテキストに、バイトをバイトにエンコードするコーデックも提供されています。 カスタムコーデックは任意のタイプ間でエンコードおよびデコードできますが、一部のモジュール機能は、テキストエンコーディングまたはバイトにエンコードするコーデックでの使用に制限されています。

このモジュールは、任意のコーデックでエンコードおよびデコードするための次の関数を定義します。

codecs.encode(obj, encoding='utf-8', errors='strict')

encoding に登録されているコーデックを使用して obj をエンコードします。

エラーを指定して、目的のエラー処理スキームを設定できます。 デフォルトのエラーハンドラーは'strict'です。これは、エンコードエラーによって ValueError (または UnicodeEncodeError などのよりコーデック固有のサブクラス)が発生することを意味します。 コーデックエラー処理の詳細については、コーデック基本クラスを参照してください。

codecs.decode(obj, encoding='utf-8', errors='strict')

encoding に登録されているコーデックを使用して obj をデコードします。

エラーを指定して、目的のエラー処理スキームを設定できます。 デフォルトのエラーハンドラは'strict'です。これは、デコードエラーによって ValueError (または UnicodeDecodeError などのよりコーデック固有のサブクラス)が発生することを意味します。 コーデックエラー処理の詳細については、コーデック基本クラスを参照してください。

各コーデックの完全な詳細は、直接検索することもできます。

codecs.lookup(encoding)

Pythonコーデックレジストリでコーデック情報を検索し、以下に定義されているように CodecInfo オブジェクトを返します。

エンコーディングは、最初にレジストリのキャッシュで検索されます。 見つからない場合は、登録されている検索機能のリストがスキャンされます。 CodecInfo オブジェクトが見つからない場合、 LookupError が発生します。 それ以外の場合、 CodecInfo オブジェクトはキャッシュに格納され、呼び出し元に返されます。

class codecs.CodecInfo(encode, decode, streamreader=None, streamwriter=None, incrementalencoder=None, incrementaldecoder=None, name=None)

コーデックレジストリを検索するときのコーデックの詳細。 コンストラクター引数は、同じ名前の属性に格納されます。

name

エンコーディングの名前。

encode
decode

ステートレスのエンコードおよびデコード機能。 これらは、コーデックインスタンスの encode()および decode()メソッドと同じインターフェイスを持つ関数またはメソッドである必要があります( Codecインターフェイスを参照)。 関数またはメソッドは、ステートレスモードで動作することが期待されています。

incrementalencoder
incrementaldecoder

インクリメンタルエンコーダおよびデコーダクラスまたはファクトリ関数。 これらは、基本クラス InitialEncoder および IncrementalDecoder によってそれぞれ定義されたインターフェースを提供する必要があります。 インクリメンタルコーデックは状態を維持できます。

streamwriter
streamreader

ストリームライターおよびリーダークラスまたはファクトリ関数。 これらは、基本クラス StreamWriter および StreamReader によってそれぞれ定義されたインターフェースを提供する必要があります。 ストリームコーデックは状態を維持できます。

さまざまなコーデックコンポーネントへのアクセスを簡素化するために、モジュールはコーデックルックアップに lookup()を使用する次の追加関数を提供します。

codecs.getencoder(encoding)

指定されたエンコーディングのコーデックを検索し、そのエンコーダ関数を返します。

エンコーディングが見つからない場合、 LookupError を発生させます。

codecs.getdecoder(encoding)

指定されたエンコーディングのコーデックを検索し、そのデコーダー関数を返します。

エンコーディングが見つからない場合、 LookupError を発生させます。

codecs.getincrementalencoder(encoding)

指定されたエンコーディングのコーデックを検索し、そのインクリメンタルエンコーダクラスまたはファクトリ関数を返します。

エンコーディングが見つからない場合、またはコーデックがインクリメンタルエンコーダをサポートしていない場合に、 LookupError を発生させます。

codecs.getincrementaldecoder(encoding)

指定されたエンコーディングのコーデックを検索し、そのインクリメンタルデコーダークラスまたはファクトリ関数を返します。

エンコーディングが見つからない場合、またはコーデックがインクリメンタルデコーダーをサポートしていない場合に、 LookupError を発生させます。

codecs.getreader(encoding)

指定されたエンコーディングのコーデックを検索し、その StreamReader クラスまたはファクトリ関数を返します。

エンコーディングが見つからない場合、 LookupError を発生させます。

codecs.getwriter(encoding)

指定されたエンコーディングのコーデックを検索し、その StreamWriter クラスまたはファクトリ関数を返します。

エンコーディングが見つからない場合、 LookupError を発生させます。

カスタムコーデックは、適切なコーデック検索機能を登録することで利用できるようになります。

codecs.register(search_function)

コーデック検索機能を登録します。 検索関数は、すべて小文字のエンコード名である1つの引数を取り、 CodecInfo オブジェクトを返すことが期待されています。 検索関数が特定のエンコーディングを見つけられない場合は、Noneを返す必要があります。

ノート

現在、検索機能の登録は元に戻せないため、ユニットテストやモジュールのリロードなどの問題が発生する可能性があります。

組み込みの open()および関連する io モジュールは、エンコードされたテキストファイルを操作するための推奨されるアプローチですが、このモジュールは、より広い範囲の使用を可能にする追加のユーティリティ関数とクラスを提供しますバイナリファイルを操作するときのコーデックの数:

codecs.open(filename, mode='r', encoding=None, errors='strict', buffering=- 1)

指定されたモードを使用してエンコードされたファイルを開き、 StreamReaderWriter のインスタンスを返し、透過的なエンコード/デコードを提供します。 デフォルトのファイルモードは'r'で、ファイルを読み取りモードで開くことを意味します。

ノート

基になるエンコードされたファイルは、常にバイナリモードで開かれます。 '\n'の自動変換は読み取りと書き込みでは行われません。 mode 引数は、組み込みの open()関数で受け入れ可能な任意のバイナリモードにすることができます。 'b'が自動的に追加されます。

encoding は、ファイルに使用されるエンコーディングを指定します。 バイトにエンコードおよびバイトからデコードする任意のエンコードが許可され、ファイルメソッドでサポートされるデータ型は使用されるコーデックによって異なります。

エラーは、エラー処理を定義するために指定される場合があります。 デフォルトは'strict'で、エンコードエラーが発生した場合に ValueError が発生します。

バッファリングは、組み込みの open()関数と同じ意味です。 デフォルトは-1です。これは、デフォルトのバッファサイズが使用されることを意味します。

codecs.EncodedFile(file, data_encoding, file_encoding=None, errors='strict')

StreamRecoder インスタンスを返します。これは、透過的なトランスコーディングを提供する file のラップバージョンです。 ラップされたバージョンが閉じられると、元のファイルが閉じられます。

ラップされたファイルに書き込まれたデータは、指定された data_encoding に従ってデコードされ、 file_encoding を使用してバイトとして元のファイルに書き込まれます。 元のファイルから読み取られたバイトは、 file_encoding に従ってデコードされ、結果は data_encoding を使用してエンコードされます。

file_encoding が指定されていない場合、デフォルトで data_encoding になります。

エラーは、エラー処理を定義するために指定される場合があります。 デフォルトは'strict'で、エンコードエラーが発生した場合に ValueError が発生します。

codecs.iterencode(iterator, encoding, errors='strict', **kwargs)

インクリメンタルエンコーダーを使用して、 iterator によって提供される入力を繰り返しエンコードします。 この関数はジェネレーターです。 errors 引数(およびその他のキーワード引数)は、インクリメンタルエンコーダに渡されます。

この関数では、コーデックがエンコードするテキスト str オブジェクトを受け入れる必要があります。 したがって、base64_codecなどのバイトツーバイトエンコーダーはサポートされていません。

codecs.iterdecode(iterator, encoding, errors='strict', **kwargs)

インクリメンタルデコーダーを使用して、イテレーターによって提供される入力を繰り返しデコードします。 この関数はジェネレーターです。 errors 引数(およびその他のキーワード引数)は、インクリメンタルデコーダーに渡されます。

この関数では、コーデックがデコードする bytes オブジェクトを受け入れる必要があります。 したがって、rot_13iterencode()と同等に使用できますが、rot_13などのテキスト間エンコーダーはサポートしていません。

このモジュールは、プラットフォームに依存するファイルの読み取りと書き込みに役立つ次の定数も提供します。

codecs.BOM

codecs.BOM_BE
codecs.BOM_LE
codecs.BOM_UTF8
codecs.BOM_UTF16
codecs.BOM_UTF16_BE
codecs.BOM_UTF16_LE
codecs.BOM_UTF32
codecs.BOM_UTF32_BE
codecs.BOM_UTF32_LE

これらの定数は、さまざまなバイトシーケンスを定義し、いくつかのエンコーディングのUnicodeバイトオーダーマーク(BOM)です。 これらは、UTF-16およびUTF-32データストリームで使用されるバイト順序を示すために使用され、UTF-8ではUnicode署名として使用されます。 BOM_UTF16 は、プラットフォームのネイティブバイト順序に応じて BOM_UTF16_BE または BOM_UTF16_LE のいずれかであり、 BOMBOM_UTF16 のエイリアスです。 、 BOM_UTF16_LE の場合は BOM_LEBOM_UTF16_BE の場合は BOM_BE 。 その他は、UTF-8およびUTF-32エンコーディングのBOMを表します。

コーデック基本クラス

codecs モジュールは、コーデックオブジェクトを操作するためのインターフェイスを定義する一連の基本クラスを定義し、カスタムコーデック実装の基礎としても使用できます。

各コーデックは、Pythonでコーデックとして使用できるように、ステートレスエンコーダー、ステートレスデコーダー、ストリームリーダー、ストリームライターの4つのインターフェイスを定義する必要があります。 ストリームリーダーとライターは通常、ステートレスエンコーダー/デコーダーを再利用してファイルプロトコルを実装します。 コーデックの作成者は、コーデックがエンコードおよびデコードエラーを処理する方法も定義する必要があります。

エラーハンドラ

エラー処理を簡素化および標準化するために、コーデックは errors 文字列引数を受け入れることにより、さまざまなエラー処理スキームを実装する場合があります。 次の文字列値は、すべての標準Pythonコーデックによって定義および実装されています。

価値 意味
'strict' UnicodeError (またはサブクラス)を発生させます。 これがデフォルトです。 strict_errors()に実装されています。
'ignore' 不正な形式のデータを無視し、通知なしに続行します。 ignore_errors()に実装されています。

次のエラーハンドラは、テキストエンコーディングにのみ適用できます。

価値 意味
'replace' 適切な交換用マーカーと交換してください。 Pythonは、デコード時の組み込みコーデックに公式のU+FFFD REPLACEMENT CHARACTERを使用し、「?」 エンコーディングについて。 replace_errors()に実装されています。
'xmlcharrefreplace' 適切なXML文字参照に置き換えます(エンコードのみ)。 xmlcharrefreplace_errors()に実装されています。
'backslashreplace' バックスラッシュされたエスケープシーケンスに置き換えます。 backslashreplace_errors()に実装されています。
'namereplace' \N{...}エスケープシーケンスに置き換えます(エンコードのみ)。 namereplace_errors()に実装されています。
'surrogateescape' デコード時に、バイトをU+DC80からU+DCFFの範囲の個々のサロゲートコードに置き換えます。 データのエンコード時に'surrogateescape'エラーハンドラーが使用されると、このコードは同じバイトに戻されます。 (詳細については、 PEP 383 を参照してください。)

さらに、次のエラーハンドラは、指定されたコーデックに固有です。

価値 コーデック 意味
'surrogatepass' utf-8、utf-16、utf-32、utf-16-be、utf-16-le、utf-32-be、utf-32-le 代理コードのエンコードとデコードを許可します。 これらのコーデックは通常、サロゲートの存在をエラーとして扱います。

バージョン3.1の新機能: 'surrogateescape'および'surrogatepass'エラーハンドラー。


バージョン3.4で変更: 'surrogatepass'エラーハンドラーがutf-16 *およびutf-32 *コーデックで機能するようになりました。


バージョン3.5の新機能: 'namereplace'エラーハンドラー。


バージョン3.5で変更: 'backslashreplace'エラーハンドラーがデコードと変換で機能するようになりました。


許可される値のセットは、新しい名前付きエラーハンドラーを登録することで拡張できます。

codecs.register_error(name, error_handler)

エラー処理関数 error_handlername という名前で登録してください。 name がerrorsパラメーターとして指定されている場合、エラーが発生した場合、エンコードおよびデコード中に error_handler 引数が呼び出されます。

エンコードの場合、 error_handler は、エラーの場所に関する情報を含む UnicodeEncodeError インスタンスで呼び出されます。 エラーハンドラは、この例外または別の例外を発生させるか、入力のエンコードできない部分とエンコードを続行する位置を置き換えたタプルを返す必要があります。 置換は、 str または bytes のいずれかです。 置換がバイトの場合、エンコーダーはそれらを出力バッファーにコピーするだけです。 置換が文字列の場合、エンコーダは置換をエンコードします。 エンコードは、指定された位置で元の入力から続行されます。 負の位置の値は、入力文字列の末尾を基準として扱われます。 結果の位置が範囲外の場合、 IndexError が発生します。

UnicodeDecodeError または UnicodeTranslateError がハンドラーに渡され、エラーハンドラーからの置換が直接出力に入れられることを除いて、デコードと変換は同様に機能します。

以前に登録されたエラーハンドラー(標準エラーハンドラーを含む)は、名前で検索できます。

codecs.lookup_error(name)

以前に name という名前で登録されたエラーハンドラーを返します。

ハンドラーが見つからない場合に LookupError を発生させます。

次の標準エラーハンドラーもモジュールレベルの関数として使用できます。

codecs.strict_errors(exception)
'strict'エラー処理を実装します。エンコードまたはデコードエラーが発生するたびに、 UnicodeError が発生します。
codecs.replace_errors(exception)
'replace'エラー処理を実装します(テキストエンコーディングのみ):エンコーディングエラー(コーデックによってエンコードされる)の代わりに'?'を使用し、'\ufffd'(デコードエラー用のUnicode置換文字)。
codecs.ignore_errors(exception)
'ignore'エラー処理を実装します。不正な形式のデータは無視され、エンコードまたはデコードは通知なしに続行されます。
codecs.xmlcharrefreplace_errors(exception)
'xmlcharrefreplace'エラー処理を実装します(テキストエンコーディングでのエンコーディングのみ):エンコードできない文字は適切なXML文字参照に置き換えられます。
codecs.backslashreplace_errors(exception)
'backslashreplace'エラー処理を実装します(テキストエンコーディングの場合のみ):不正な形式のデータは、バックスラッシュされたエスケープシーケンスに置き換えられます。
codecs.namereplace_errors(exception)

'namereplace'エラー処理を実装します(テキストエンコーディングでのエンコーディングのみ):エンコードできない文字は\N{...}エスケープシーケンスに置き換えられます。

バージョン3.5の新機能。


ステートレスエンコーディングとデコーディング

基本Codecクラスは、ステートレスエンコーダーとデコーダーの関数インターフェイスも定義するこれらのメソッドを定義します。

Codec.encode(input[, errors])

オブジェクト input をエンコードし、タプル(出力オブジェクト、消費された長さ)を返します。 たとえば、テキストエンコーディングは、特定の文字セットエンコーディング(cp1252またはiso-8859-1)を使用して文字列オブジェクトをバイトオブジェクトに変換します。

errors 引数は、適用するエラー処理を定義します。 デフォルトは'strict'処理です。

このメソッドは、Codecインスタンスに状態を格納しない場合があります。 エンコーディングを効率的にするために状態を維持する必要があるコーデックには、 StreamWriter を使用します。

この状況では、エンコーダーは長さゼロの入力を処理し、出力オブジェクトタイプの空のオブジェクトを返すことができる必要があります。

Codec.decode(input[, errors])

オブジェクト input をデコードし、タプル(出力オブジェクト、消費された長さ)を返します。 たとえば、テキストエンコーディングの場合、デコードは、特定の文字セットエンコーディングを使用してエンコードされたバイトオブジェクトを文字列オブジェクトに変換します。

テキストエンコーディングおよびバイトツーバイトコーデックの場合、 input は、バイトオブジェクト、または読み取り専用のバッファインターフェイスを提供するオブジェクト(たとえば、バッファオブジェクトやメモリマップトファイル)である必要があります。

errors 引数は、適用するエラー処理を定義します。 デフォルトは'strict'処理です。

このメソッドは、Codecインスタンスに状態を格納しない場合があります。 デコードを効率的にするために状態を保持する必要があるコーデックには、 StreamReader を使用します。

この状況では、デコーダーは長さゼロの入力を処理し、出力オブジェクトタイプの空のオブジェクトを返すことができる必要があります。


インクリメンタルエンコーディングとデコーディング

InitialEncoder クラスと IncrementalDecoder クラスは、インクリメンタルエンコーディングとデコーディングの基本的なインターフェイスを提供します。 入力のエンコード/デコードは、ステートレスエンコーダー/デコーダー関数の1回の呼び出しではなく、インクリメンタルエンコーダーの encode() / decode()メソッドの複数回の呼び出しで行われます。 /デコーダ。 インクリメンタルエンコーダー/デコーダーは、メソッド呼び出し中にエンコード/デコードプロセスを追跡します。

encode() / decode()メソッドへの呼び出しの結合された出力は、すべての単一入力が1つに結合された場合と同じであり、この入力はでエンコード/デコードされました。ステートレスエンコーダ/デコーダ。

IncrementalEncoderオブジェクト

IncrementalEncoder クラスは、複数のステップで入力をエンコードするために使用されます。 これは、Pythonコーデックレジストリと互換性を持たせるためにすべてのインクリメンタルエンコーダが定義する必要がある次のメソッドを定義します。

class codecs.IncrementalEncoder(errors='strict')

IncrementalEncoder インスタンスのコンストラクター。

すべてのインクリメンタルエンコーダは、このコンストラクタインターフェイスを提供する必要があります。 キーワード引数は自由に追加できますが、Pythonコーデックレジストリで使用されるのはここで定義されているものだけです。

IncrementalEncoder は、 errors キーワード引数を提供することにより、さまざまなエラー処理スキームを実装できます。 可能な値については、エラーハンドラーを参照してください。

errors 引数は、同じ名前の属性に割り当てられます。 この属性を割り当てると、 IncrementalEncoder オブジェクトの存続期間中にさまざまなエラー処理戦略を切り替えることができます。

encode(object[, final])

object をエンコードし(エンコーダーの現在の状態を考慮に入れて)、結果のエンコードされたオブジェクトを返します。 これが encode() final の最後の呼び出しである場合、trueである必要があります(デフォルトはfalseです)。

reset()

エンコーダを初期状態にリセットします。 出力は破棄されます。.encode(object, final=True)を呼び出し、必要に応じて空のバイトまたはテキスト文字列を渡して、エンコーダをリセットし、出力を取得します。

getstate()

エンコーダの現在の状態を返します。これは整数である必要があります。 実装では、0が最も一般的な状態であることを確認する必要があります。 (整数よりも複雑な状態は、状態をマーシャリング/ピクルス化し、結果の文字列のバイトを整数にエンコードすることで整数に変換できます。)

setstate(state)

エンコーダの状態を状態に設定します。 state は、 getstate()によって返されるエンコーダー状態である必要があります。


IncrementalDecoderオブジェクト

IncrementalDecoder クラスは、複数のステップで入力をデコードするために使用されます。 これは、Pythonコーデックレジストリと互換性を持たせるためにすべてのインクリメンタルデコーダーが定義する必要がある次のメソッドを定義します。

class codecs.IncrementalDecoder(errors='strict')

IncrementalDecoder インスタンスのコンストラクター。

すべてのインクリメンタルデコーダーは、このコンストラクターインターフェイスを提供する必要があります。 キーワード引数は自由に追加できますが、Pythonコーデックレジストリで使用されるのはここで定義されているものだけです。

IncrementalDecoder は、 errors キーワード引数を提供することにより、さまざまなエラー処理スキームを実装できます。 可能な値については、エラーハンドラーを参照してください。

errors 引数は、同じ名前の属性に割り当てられます。 この属性を割り当てると、 IncrementalDecoder オブジェクトの存続期間中にさまざまなエラー処理戦略を切り替えることができます。

decode(object[, final])

オブジェクトをデコードし(デコーダーの現在の状態を考慮に入れて)、結果のデコードされたオブジェクトを返します。 これが decode() final の最後の呼び出しである場合、trueである必要があります(デフォルトはfalseです)。 final がtrueの場合、デコーダーは入力を完全にデコードし、すべてのバッファーをフラッシュする必要があります。 これが不可能な場合(例: 入力の最後のバイトシーケンスが不完全なため)ステートレスの場合と同じようにエラー処理を開始する必要があります(例外が発生する可能性があります)。

reset()

デコーダーを初期状態にリセットします。

getstate()

デコーダーの現在の状態を返します。 これは2つの項目を持つタプルである必要があり、最初の項目はまだデコードされていない入力を含むバッファーである必要があります。 2番目は整数である必要があり、追加の状態情報にすることができます。 (実装では、0が最も一般的な追加の状態情報であることを確認する必要があります。)この追加の状態情報が0の場合、デコーダーを入力バッファーのない状態に設定できる必要があります。追加の状態情報として0を使用します。これにより、以前にバッファリングされた入力をデコーダに供給すると、出力を生成せずに前の状態に戻ります。 (整数よりも複雑な追加の状態情報は、情報をマーシャリング/ピクルス化し、結果の文字列のバイトを整数にエンコードすることで整数に変換できます。)

setstate(state)

デコーダーの状態を state に設定します。 state は、 getstate()によって返されるデコーダー状態である必要があります。


ストリームのエンコードとデコード

StreamWriter および StreamReader クラスは、新しいエンコーディングサブモジュールを非常に簡単に実装するために使用できる汎用の作業インターフェイスを提供します。 これがどのように行われるかの例については、encodings.utf_8を参照してください。

StreamWriterオブジェクト

StreamWriter クラスはCodecのサブクラスであり、Pythonコーデックレジストリと互換性を持たせるためにすべてのストリームライターが定義する必要がある次のメソッドを定義します。

class codecs.StreamWriter(stream, errors='strict')

StreamWriter インスタンスのコンストラクター。

すべてのストリームライターは、このコンストラクターインターフェイスを提供する必要があります。 キーワード引数は自由に追加できますが、Pythonコーデックレジストリで使用されるのはここで定義されているものだけです。

stream 引数は、特定のコーデックに応じて、テキストまたはバイナリデータを書き込むために開いているファイルのようなオブジェクトである必要があります。

StreamWriter は、 errors キーワード引数を提供することにより、さまざまなエラー処理スキームを実装できます。 基盤となるストリームコーデックがサポートする可能性のある標準エラーハンドラーについては、エラーハンドラーを参照してください。

errors 引数は、同じ名前の属性に割り当てられます。 この属性を割り当てると、 StreamWriter オブジェクトの存続期間中にさまざまなエラー処理戦略を切り替えることができます。

write(object)

エンコードされたオブジェクトのコンテンツをストリームに書き込みます。

writelines(list)

文字列の連結リストをストリームに書き込みます(おそらく write()メソッドを再利用することによって)。 標準のバイトツーバイトコーデックは、この方法をサポートしていません。

reset()

状態を維持するために使用されるコーデックバッファをフラッシュしてリセットします。

このメソッドを呼び出すと、出力のデータがクリーンな状態になり、状態を回復するためにストリーム全体を再スキャンしなくても、新しい新しいデータを追加できるようになります。

上記のメソッドに加えて、 StreamWriter は、基になるストリームから他のすべてのメソッドと属性も継承する必要があります。


StreamReaderオブジェクト

StreamReader クラスはCodecのサブクラスであり、Pythonコーデックレジストリと互換性を持たせるためにすべてのストリームリーダーが定義する必要がある次のメソッドを定義します。

class codecs.StreamReader(stream, errors='strict')

StreamReader インスタンスのコンストラクター。

すべてのストリームリーダーは、このコンストラクターインターフェイスを提供する必要があります。 キーワード引数は自由に追加できますが、Pythonコーデックレジストリで使用されるのはここで定義されているものだけです。

stream 引数は、特定のコーデックに応じて、テキストまたはバイナリデータを読み取るために開いているファイルのようなオブジェクトである必要があります。

StreamReader は、 errors キーワード引数を提供することにより、さまざまなエラー処理スキームを実装できます。 基盤となるストリームコーデックがサポートする可能性のある標準エラーハンドラーについては、エラーハンドラーを参照してください。

errors 引数は、同じ名前の属性に割り当てられます。 この属性を割り当てると、 StreamReader オブジェクトの存続期間中にさまざまなエラー処理戦略を切り替えることができます。

errors 引数に許可される値のセットは、 register_error()で拡張できます。

read([size[, chars[, firstline]]])

ストリームからデータをデコードし、結果のオブジェクトを返します。

chars 引数は、返されるデコードされたコードポイントまたはバイトの数を示します。 read()メソッドは、要求されたよりも多くのデータを返すことはありませんが、十分な数がない場合は、返されるデータが少なくなる可能性があります。

size 引数は、デコードのために読み取るエンコードされたバイトまたはコードポイントのおおよその最大数を示します。 デコーダーは、この設定を必要に応じて変更できます。 デフォルト値-1は、可能な限り読み取りとデコードを行うことを示します。 このパラメーターは、巨大なファイルを1つのステップでデコードする必要がないようにすることを目的としています。

firstline フラグは、後の行でデコードエラーが発生した場合に、最初の行のみを返すだけで十分であることを示します。

このメソッドは、貪欲な読み取り戦略を使用する必要があります。つまり、エンコーディングの定義と指定されたサイズ内で許可されている限り多くのデータを読み取る必要があります。 オプションのエンコーディング終了または状態マーカーがストリームで使用可能な場合は、これらも読み取る必要があります。

readline([size[, keepends]])

入力ストリームから1行を読み取り、デコードされたデータを返します。

size は、指定されている場合、サイズ引数としてストリームの read()メソッドに渡されます。

keepends がfalseの場合、返される行から行末が削除されます。

readlines([sizehint[, keepends]])

入力ストリームで使用可能なすべての行を読み取り、それらを行のリストとして返します。

行末はコーデックの decode()メソッドを使用して実装され、 keepends がtrueの場合にリストエントリに含まれます。

sizehint は、指定されている場合、 size 引数としてストリームの read()メソッドに渡されます。

reset()

状態を維持するために使用されるコーデックバッファをリセットします。

ストリームの再配置は行わないでください。 この方法は、主にデコードエラーから回復できるようにすることを目的としています。

上記のメソッドに加えて、 StreamReader は、基になるストリームから他のすべてのメソッドと属性も継承する必要があります。


StreamReaderWriterオブジェクト

StreamReaderWriter は、読み取りモードと書き込みモードの両方で機能するストリームをラップできる便利なクラスです。

lookup()関数によって返されるファクトリ関数を使用してインスタンスを構築できるように設計されています。

class codecs.StreamReaderWriter(stream, Reader, Writer, errors='strict')
StreamReaderWriter インスタンスを作成します。 stream はファイルのようなオブジェクトである必要があります。 Reader および Writer は、 StreamReader および StreamWriter インターフェイスを提供するファクトリ関数またはクラスである必要があります。 エラー処理は、ストリームのリーダーとライターで定義されているのと同じ方法で行われます。

StreamReaderWriter インスタンスは、 StreamReader クラスと StreamWriter クラスの組み合わせインターフェースを定義します。 それらは、基礎となるストリームから他のすべてのメソッドと属性を継承します。


StreamRecoderオブジェクト

StreamRecoder は、あるエンコーディングから別のエンコーディングにデータを変換します。これは、さまざまなエンコーディング環境を処理するときに役立つ場合があります。

lookup()関数によって返されるファクトリ関数を使用してインスタンスを構築できるように設計されています。

class codecs.StreamRecoder(stream, encode, decode, Reader, Writer, errors='strict')

双方向変換を実装する StreamRecoder インスタンスを作成します。 encode および decode はフロントエンドで機能します—データはread()を呼び出すコードに表示されますおよびwrite()Reader および Writer はバックエンドで動作します— stream のデータ。

これらのオブジェクトを使用して、Latin-1からUTF-8へ、またはその逆など、透過的なトランスコーディングを行うことができます。

stream 引数はファイルのようなオブジェクトである必要があります。

encode および decode 引数は、Codecインターフェースに準拠している必要があります。 Reader および Writer は、それぞれ StreamReader および StreamWriter インターフェイスのオブジェクトを提供するファクトリ関数またはクラスである必要があります。

エラー処理は、ストリームのリーダーとライターで定義されているのと同じ方法で行われます。

StreamRecoder インスタンスは、 StreamReader クラスと StreamWriter クラスの組み合わせインターフェースを定義します。 それらは、基礎となるストリームから他のすべてのメソッドと属性を継承します。


エンコーディングとUnicode

文字列は、0x00x10FFFFの範囲のコードポイントのシーケンスとして内部的に格納されます。 (実装の詳細については、 PEP 393 を参照してください。)文字列オブジェクトがCPUとメモリの外部で使用されると、エンディアンとこれらの配列がバイトとして格納される方法が問題になります。 他のコーデックと同様に、文字列をバイトシーケンスにシリアル化することはエンコーディングと呼ばれ、バイトシーケンスから文字列を再作成することはデコードと呼ばれます。 テキストエンコーディングと呼ばれる集合体であるさまざまな異なるテキストシリアル化コーデックがあります。

最も単純なテキストエンコーディング('latin-1'または'iso-8859-1'と呼ばれる)は、コードポイント0〜255をバイト0x00xffにマップします。これは、文字列オブジェクトを意味します。 U+00FFより上のコードポイントを含むコードはこのコーデックでエンコードできません。 これを行うと、次のような UnicodeEncodeError が発生します(エラーメッセージの詳細は異なる場合があります):UnicodeEncodeError: 'latin-1' codec can't encode character '\u1234' in position 3: ordinal not in range(256)

すべてのUnicodeコードポイントの異なるサブセットを選択するエンコーディングの別のグループ(いわゆるcharmapエンコーディング)と、これらのコードポイントがバイト0x00xffにマップされる方法があります。 これがどのように行われるかを確認するには、たとえば encodings/cp1252.py(これは主にWindowsで使用されるエンコーディングです)。 どの文字がどのバイト値にマップされているかを示す256文字の文字列定数があります。

これらのエンコーディングはすべて、Unicodeで定義された1114112コードポイントのうち256個しかエンコードできません。 各Unicodeコードポイントを格納できる簡単で簡単な方法は、各コードポイントを4つの連続したバイトとして格納することです。 2つの可能性があります。バイトをビッグエンディアンまたはリトルエンディアンの順序で格納します。 これらの2つのエンコーディングは、それぞれUTF-32-BEおよびUTF-32-LEと呼ばれます。 彼らの不利な点は、例えば リトルエンディアンのマシンでUTF-32-BEを使用する場合は、エンコードとデコードで常にバイトを交換する必要があります。 UTF-32は、この問題を回避します。バイトは常に自然なエンディアンになります。 ただし、これらのバイトが異なるエンディアンのCPUによって読み取られる場合は、バイトを交換する必要があります。 UTF-16またはUTF-32バイトシーケンスのエンディアンを検出できるようにするために、いわゆるBOM(「バイトオーダーマーク」)があります。 これはUnicode文字U+FEFFです。 この文字は、すべてのUTF-16またはUTF-32バイトシーケンスの前に付けることができます。 この文字のバイトスワップバージョン(0xFFFE)は、Unicodeテキストに表示されない可能性のある不正な文字です。 したがって、UTF-16またはUTF-32バイトシーケンスの最初の文字がU+FFFEであるように見える場合は、デコード時にバイトを交換する必要があります。 残念ながら、文字U+FEFFには、ZERO WIDTH NO-BREAK SPACEとしての2番目の目的がありました。幅がなく、単語を分割できない文字です。 それは例えばすることができます 合字アルゴリズムにヒントを与えるために使用されます。 U+FEFFZERO WIDTH NO-BREAK SPACEとして使用するUnicode4.0では、非推奨になりました(U+2060WORD JOINER)がこの役割を引き受けます)。 それでも、Unicodeソフトウェアは両方の役割でU+FEFFを処理できる必要があります。BOMとして、エンコードされたバイトのストレージレイアウトを決定するデバイスであり、バイトシーケンスが文字列にデコードされると消えます。 ZERO WIDTH NO-BREAK SPACEとして、他の文字と同じようにデコードされる通常の文字です。

Unicode文字の全範囲をエンコードできる別のエンコードがあります:UTF-8。 UTF-8は8ビットエンコーディングです。つまり、UTF-8のバイト順序に問題はありません。 UTF-8バイトシーケンスの各バイトは、マーカービット(最上位ビット)とペイロードビットの2つの部分で構成されます。 マーカービットは、0〜4個の1ビットとそれに続く0ビットのシーケンスです。 Unicode文字は次のようにエンコードされます(xはペイロードビットであり、連結するとUnicode文字になります)。

範囲 エンコーディング
U-00000000U-0000007F 0xxxxxxx
U-00000080U-000007FF 110xxxxx 10xxxxxx
U-00000800U-0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
U-00010000U-0010FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Unicode文字の最下位ビットは、右端のxビットです。

UTF-8は8ビットエンコーディングであるため、BOMは不要であり、デコードされた文字列内のU+FEFF文字は(最初の文字であっても)ZERO WIDTH NO-BREAK SPACEとして扱われます。

外部情報がないと、文字列のエンコードに使用されたエンコードを確実に判別することはできません。 各charmapエンコーディングは、任意のランダムなバイトシーケンスをデコードできます。 ただし、UTF-8のバイトシーケンスは任意のバイトシーケンスを許可しない構造を持っているため、UTF-8ではそれは不可能です。 UTF-8エンコーディングを検出できる信頼性を高めるために、Microsoftはメモ帳プログラム用にUTF-8のバリアント(Python2.5が"utf-8-sig"を呼び出す)を発明しました。Unicode文字が書き込まれる前にファイルには、UTF-8でエンコードされたBOM(バイトシーケンスとして次のようになります:0xef0xbb0xbf)が書き込まれます。 チャーマップでエンコードされたファイルがこれらのバイト値で始まる可能性はかなり低いため(たとえば、 にマップ

分音記号付きラテン語の小さな文字I

右向きのダブルアングル見積もりマーク

逆疑問符

iso-8859-1)では、これにより、utf-8-sigエンコーディングがバイトシーケンスから正しく推測できる可能性が高くなります。 したがって、ここでは、BOMを使用して、バイトシーケンスの生成に使用されるバイト順序を決定することはできませんが、エンコーディングを推測するのに役立つ署名として使用されます。 utf-8-sigコーデックをエンコードすると、ファイルの最初の3バイトとして0xef0xbb0xbfが書き込まれます。 デコード時に、utf-8-sigは、ファイルの最初の3バイトとして表示される場合、それらの3バイトをスキップします。 UTF-8では、BOMの使用は推奨されておらず、通常は避ける必要があります。


標準エンコーディング

Pythonには、C関数として実装されているか、マッピングテーブルとして辞書が実装されている、多数のコーデックが組み込まれています。 次の表に、名前別のコーデック、いくつかの一般的なエイリアス、およびエンコーディングが使用される可能性のある言語を示します。 エイリアスのリストも言語のリストも網羅的であることを意図していません。 大文字と小文字のみが異なる、またはアンダースコアの代わりにハイフンを使用する代替スペルも有効なエイリアスであることに注意してください。 したがって、例えば 'utf-8'は、'utf_8'コーデックの有効なエイリアスです。

文字セットの多くは同じ言語をサポートしています。 それらは個々のキャラクターによって異なります(例: EURO SIGNがサポートされているかどうか)、およびコード位置への文字の割り当て。 特にヨーロッパ言語の場合、通常、次のバリアントが存在します。

  • ISO8859コードセット
  • Microsoft Windowsコードページ。通常は8859コードセットから派生しますが、制御文字を追加のグラフィック文字に置き換えます。
  • IBMEBCDICコードページ
  • ASCII互換のIBMPCコードページ
コーデック エイリアス 言語
アスキー 646、us-ascii 英語
big5 big5-tw、csbig5 繁体字中国語
big5hkscs big5-hkscs、hkscs 繁体字中国語
cp037 IBM037、IBM039 英語
cp273 273、IBM273、csIBM273

ドイツ人

バージョン3.4の新機能。


cp424 EBCDIC-CP-HE、IBM424 ヘブライ語
cp437 437、IBM437 英語
cp500 EBCDIC-CP-BE、EBCDIC-CP-CH、IBM500 西ヨーロッパ
cp720 アラビア語
cp737 ギリシャ語
cp775 IBM775 バルト語
cp850 850、IBM850 西ヨーロッパ
cp852 852、IBM852 中央および東ヨーロッパ
cp855 855、IBM855 ブルガリア語、ベラルーシ語、マケドニア語、ロシア語、セルビア語
cp856 ヘブライ語
cp857 857、IBM857 トルコ語
cp858 858、IBM858 西ヨーロッパ
cp860 860、IBM860 ポルトガル語
cp861 861、CP-IS、IBM861 アイスランド語
cp862 862、IBM862 ヘブライ語
cp863 863、IBM863 カナダ人
cp864 IBM864 アラビア語
cp865 865、IBM865 デンマーク語、ノルウェー語
cp866 866、IBM866 ロシア
cp869 869、CP-GR、IBM869 ギリシャ語
cp874 タイ語
cp875 ギリシャ語
cp932 932、ms932、mskanji、ms-kanji 日本
cp949 949、ms949、uhc 韓国語
cp950 950、ms950 繁体字中国語
cp1006 ウルドゥー語
cp1026 ibm1026 トルコ語
cp1125 1125、ibm1125、cp866u、ruscii

ウクライナ語

バージョン3.4の新機能。


cp1140 ibm1140 西ヨーロッパ
cp1250 Windows-1250 中央および東ヨーロッパ
cp1251 窓-1251 ブルガリア語、ベラルーシ語、マケドニア語、ロシア語、セルビア語
cp1252 windows-1252 西ヨーロッパ
cp1253 windows-1253 ギリシャ語
cp1254 windows-1254 トルコ語
cp1255 windows-1255 ヘブライ語
cp1256 windows-1256 アラビア語
cp1257 windows-1257 バルト語
cp1258 windows-1258 ベトナム語
euc_jp eucjp、ujis、u-jis 日本
euc_jis_2004 jisx0213、eucjis2004 日本
euc_jisx0213 eucjisx0213 日本
euc_kr euckr、韓国語、ksc5601、ks_c-5601、ks_c-5601-1987、ksx1001、ks_x-1001 韓国語
gb2312 中国語、csiso58gb231280、euc-cn、euccn、eucgb2312-cn、gb2312-1980、gb2312-80、iso-ir-58 簡体字中国語
gbk 936、cp936、ms936 統一された中国語
gb18030 gb18030-2000 統一された中国語
hz hzgb、hz-gb、hz-gb-2312 簡体字中国語
iso2022_jp csiso2022jp、iso2022jp、iso-2022-jp 日本
iso2022_jp_1 iso2022jp-1、iso-2022-jp-1 日本
iso2022_jp_2 iso2022jp-2、iso-2022-jp-2 日本語、韓国語、簡体字中国語、西ヨーロッパ、ギリシャ語
iso2022_jp_2004 iso2022jp-2004、iso-2022-jp-2004 日本
iso2022_jp_3 iso2022jp-3、iso-2022-jp-3 日本
iso2022_jp_ext iso2022jp-ext、iso-2022-jp-ext 日本
iso2022_kr csiso2022kr、iso2022kr、iso-2022-kr 韓国語
latin_1 iso-8859-1、iso8859-1、8859、cp819、latin、latin1、L1 西ヨーロッパ
iso8859_2 iso-8859-2、latin2、L2 中央および東ヨーロッパ
iso8859_3 iso-8859-3、latin3、L3 エスペラント語、マルタ語
iso8859_4 iso-8859-4、latin4、L4 バルト語
iso8859_5 iso-8859-5、キリル文字 ブルガリア語、ベラルーシ語、マケドニア語、ロシア語、セルビア語
iso8859_6 iso-8859-6、アラビア語 アラビア語
iso8859_7 iso-8859-7、ギリシャ語、ギリシャ語8 ギリシャ語
iso8859_8 iso-8859-8、ヘブライ語 ヘブライ語
iso8859_9 iso-8859-9、latin5、L5 トルコ語
iso8859_10 iso-8859-10、latin6、L6 北欧言語
iso8859_11 iso-8859-11、タイ タイ語
iso8859_13 iso-8859-13、latin7、L7 バルト語
iso8859_14 iso-8859-14、latin8、L8 ケルト語
iso8859_15 iso-8859-15、latin9、L9 西ヨーロッパ
iso8859_16 iso-8859-16、latin10、L10 南東ヨーロッパ
ジョハブ cp1361、ms1361 韓国語
koi8_r ロシア
koi8_t

タジク語

バージョン3.5の新機能。


koi8_u ウクライナ語
kz1048 kz_1048、strk1048_2002、rk1048

カザフ

バージョン3.5の新機能。


mac_cyrillic maccyrillic ブルガリア語、ベラルーシ語、マケドニア語、ロシア語、セルビア語
mac_greek マックグリーク ギリシャ語
mac_iceland maciceland アイスランド語
mac_latin2 maclatin2、maccentraleurope 中央および東ヨーロッパ
mac_roman マクロマン、マッキントッシュ 西ヨーロッパ
mac_turkish macturkish トルコ語
ptcp154 csptcp154、pt154、cp154、キリル文字-アジア カザフ
shift_jis csshiftjis、shiftjis、sjis、s_jis 日本
shift_jis_2004 shiftjis2004、sjis_2004、sjis2004 日本
shift_jisx0213 shiftjisx0213、sjisx0213、s_jisx0213 日本
utf_32 U32、utf32 すべての言語
utf_32_be UTF-32BE すべての言語
utf_32_le UTF-32LE すべての言語
utf_16 U16、utf16 すべての言語
utf_16_be UTF-16BE すべての言語
utf_16_le UTF-16LE すべての言語
utf_7 U7、unicode-1-1-utf-7 すべての言語
utf_8 U8、UTF、utf8、cp65001 すべての言語
utf_8_sig すべての言語

バージョン3.4での変更: utf-16 *およびutf-32 *エンコーダーでは、代理コードポイント(U+D800U+DFFF)をエンコードできなくなりました。 utf-32 *デコーダーは、サロゲートコードポイントに対応するバイトシーケンスをデコードしなくなりました。


バージョン3.8で変更: cp65001utf_8のエイリアスになりました。


Python固有のエンコーディング

事前定義されたコーデックの多くはPythonに固有であるため、それらのコーデック名はPython以外では意味がありません。 これらは、予想される入力および出力タイプに基づいて以下の表にリストされています(テキストエンコーディングはコーデックの最も一般的なユースケースですが、基盤となるコーデックインフラストラクチャは、テキストエンコーディングだけでなく、任意のデータ変換をサポートします)。 非対称コーデックの場合、記載されている意味はエンコードの方向を表します。

テキストエンコーディング

次のコーデックは、Unicodeテキストエンコーディングと同様に、 str から bytes エンコーディングおよび bytesのようなオブジェクトから str デコーディングを提供します。

コーデック エイリアス 意味
idna RFC 3490 を実装します。 encodings.idna も参照してください。 errors='strict'のみがサポートされています。
mbcs ansi、dbcs Windowsのみ:ANSIコードページ(CP_ACP)に従ってオペランドをエンコードします。
OEM

Windowsのみ:OEMコードページ(CP_OEMCP)に従ってオペランドをエンコードします。

バージョン3.6の新機能。


パルモス PalmOS3.5のエンコーディング。
punycode RFC 3492 を実装します。 ステートフルコーデックはサポートされていません。
raw_unicode_escape 他のコードポイントには\uXXXXおよび\UXXXXXXXXを使用したLatin-1エンコーディング。 既存の円記号は決してエスケープされません。 Pythonのpickleプロトコルで使用されます。
未定義 空の文字列も含め、すべての変換に対して例外を発生させます。 エラーハンドラは無視されます。
unicode_escape 引用符がエスケープされないことを除いて、ASCIIでエンコードされたPythonソースコードのUnicodeリテラルの内容として適したエンコード。 Latin-1ソースコードからデコードします。 Pythonソースコードは実際にはデフォルトでUTF-8を使用することに注意してください。

バージョン3.8で変更:「unicode_internal」コーデックが削除されました。


バイナリ変換

次のコーデックはバイナリ変換を提供します:バイトのようなオブジェクトからバイトへのマッピング。 bytes.decode()str 出力のみを生成する)ではサポートされていません。

コーデック エイリアス 意味 エンコーダー/デコーダー
base64_codec 1 base64、base_64

オペランドを複数行のMIMEbase64に変換します(結果には常に末尾の'\n'が含まれます)。

バージョン3.4で変更:バイトのようなオブジェクトをエンコードおよびデコードの入力として受け入れます


base64.encodebytes() / base64.decodebytes()
bz2_codec bz2 bz2を使用してオペランドを圧縮します。 bz2.compress() / bz2.decompress()
hex_codec ヘックス オペランドを1バイトあたり2桁の16進表現に変換します。 binascii.b2a_hex() / binascii.a2b_hex()
quopri_codec quopri、quotedprintable、quoted_printable オペランドをMIMEquotedprintableに変換します。 quopri.encode()quotetabs=True / quopri.decode()
uu_codec uu uuencodeを使用してオペランドを変換します。 uu.encode() / uu.decode()
zlib_codec zip、zlib gzipを使用してオペランドを圧縮します。 zlib.compress() / zlib.decompress()
1
バイトのようなオブジェクトに加えて、'base64_codec'は、デコード用に str のASCIIのみのインスタンスも受け入れます。

バージョン3.2の新機能:バイナリ変換の復元。


バージョン3.4で変更:バイナリ変換のエイリアスの復元。


テキスト変換

次のコーデックはテキスト変換を提供します: str から str へのマッピング。 str.encode()bytes 出力のみを生成する)ではサポートされていません。

コーデック エイリアス 意味
rot_13 rot13 オペランドのシーザー暗号暗号化を返します。

バージョン3.2の新機能: rot_13テキスト変換の復元。


バージョン3.4で変更: rot13エイリアスの復元。


encodings.idna —アプリケーションの国際化ドメイン名

このモジュールは、 RFC 3490 (アプリケーションの国際化ドメイン名)および RFC 3492 (Nameprep:国際化ドメイン名のStringprepプロファイル( IDN))。 punycodeエンコーディングと stringprep に基づいて構築されています。

からのIDNA2008標準が必要な場合 RFC 5891 RFC 5895 、サードパーティを使用します idnaモジュール _ 。

これらのRFCは一緒に、ドメイン名で非ASCII文字をサポートするプロトコルを定義します。 非ASCII文字(www.Alliancefrançaise.nuなど)を含むドメイン名は、ASCII互換のエンコーディング(www.xn--alliancefranaise-npb.nuなどのACE)に変換されます。 ドメイン名のACE形式は、DNSクエリ、HTTP Host フィールドなど、プロトコルで任意の文字が許可されていないすべての場所で使用されます。 この変換はアプリケーションで実行されます。 可能であれば、ユーザーには見えない:アプリケーションは、Unicodeドメインラベルをネットワーク上で透過的にIDNAに変換し、ACEラベルをUnicodeに変換してから、ユーザーに提示する必要があります。

Pythonは、いくつかの方法でこの変換をサポートしています。idnaコーデックは、UnicodeとACEの間の変換を実行し、RFC3490の セクション3.1で定義されている区切り文字に基づいて入力文字列をラベルに分離します。 および必要に応じて各ラベルをACEに変換し、逆に.区切り文字に基づいて入力バイト文字列をラベルに分離し、見つかったACEラベルをUnicodeに変換します。 さらに、 socket モジュールはUnicodeホスト名をACEに透過的に変換するため、アプリケーションはホスト名をソケットモジュールに渡すときにホスト名自体を変換する必要はありません。 さらに、 http.clientftplib など、関数パラメーターとしてホスト名を持つモジュールは、Unicodeホスト名( http.client )を受け入れます。 Host フィールドを送信する場合は、そのフィールドでIDNAホスト名を透過的に送信します。

ワイヤーからホスト名を受信する場合(逆の名前検索など)、Unicodeへの自動変換は実行されません。そのようなホスト名をユーザーに提示したいアプリケーションは、それらをUnicodeにデコードする必要があります。

モジュール encodings.idna は、ホスト名に対して特定の正規化を実行し、国際ドメイン名の大文字と小文字を区別せず、類似した文字を統合するnameprepプロシージャも実装します。 nameprep関数は、必要に応じて直接使用できます。

encodings.idna.nameprep(label)
ラベルの名前が準備されたバージョンを返します。 実装は現在クエリ文字列を想定しているため、AllowUnassignedはtrueです。
encodings.idna.ToASCII(label)
RFC 3490 で指定されているように、ラベルをASCIIに変換します。 UseSTD3ASCIIRulesはfalseと見なされます。
encodings.idna.ToUnicode(label)
RFC 3490 で指定されているように、ラベルをUnicodeに変換します。


encodings.mbcs — WindowsANSIコードページ

このモジュールは、ANSIコードページ(CP_ACP)を実装します。

バージョン3.3で変更:すべてのエラーハンドラーをサポートします。


バージョン3.2で変更: 3.2より前は、エラー引数は無視されていました。 'replace'は常にエンコードに使用され、'ignore'はデコードに使用されました。


encodings.utf_8_sig —BOM署名付きのUTF-8コーデック

このモジュールは、UTF-8コーデックのバリアントを実装します。 エンコード時に、UTF-8でエンコードされたBOMがUTF-8でエンコードされたバイトの前に付加されます。 ステートフルエンコーダの場合、これは1回だけ実行されます(バイトストリームへの最初の書き込み時)。 デコード時に、データの開始時にオプションのUTF-8エンコードされたBOMがスキップされます。