Home | History | Annotate | Download | only in library
      1 :mod:`codecs` --- Codec registry and base classes
      2 =================================================
      3 
      4 .. module:: codecs
      5    :synopsis: Encode and decode data and streams.
      6 
      7 .. moduleauthor:: Marc-Andr Lemburg <mal (a] lemburg.com>
      8 .. sectionauthor:: Marc-Andr Lemburg <mal (a] lemburg.com>
      9 .. sectionauthor:: Martin v. Lwis <martin (a] v.loewis.de>
     10 
     11 **Source code:** :source:`Lib/codecs.py`
     12 
     13 .. index::
     14    single: Unicode
     15    single: Codecs
     16    pair: Codecs; encode
     17    pair: Codecs; decode
     18    single: streams
     19    pair: stackable; streams
     20 
     21 --------------
     22 
     23 This module defines base classes for standard Python codecs (encoders and
     24 decoders) and provides access to the internal Python codec registry, which
     25 manages the codec and error handling lookup process. Most standard codecs
     26 are :term:`text encodings <text encoding>`, which encode text to bytes,
     27 but there are also codecs provided that encode text to text, and bytes to
     28 bytes. Custom codecs may encode and decode between arbitrary types, but some
     29 module features are restricted to use specifically with
     30 :term:`text encodings <text encoding>`, or with codecs that encode to
     31 :class:`bytes`.
     32 
     33 The module defines the following functions for encoding and decoding with
     34 any codec:
     35 
     36 .. function:: encode(obj, encoding='utf-8', errors='strict')
     37 
     38    Encodes *obj* using the codec registered for *encoding*.
     39 
     40    *Errors* may be given to set the desired error handling scheme. The
     41    default error handler is ``'strict'`` meaning that encoding errors raise
     42    :exc:`ValueError` (or a more codec specific subclass, such as
     43    :exc:`UnicodeEncodeError`). Refer to :ref:`codec-base-classes` for more
     44    information on codec error handling.
     45 
     46 .. function:: decode(obj, encoding='utf-8', errors='strict')
     47 
     48    Decodes *obj* using the codec registered for *encoding*.
     49 
     50    *Errors* may be given to set the desired error handling scheme. The
     51    default error handler is ``'strict'`` meaning that decoding errors raise
     52    :exc:`ValueError` (or a more codec specific subclass, such as
     53    :exc:`UnicodeDecodeError`). Refer to :ref:`codec-base-classes` for more
     54    information on codec error handling.
     55 
     56 The full details for each codec can also be looked up directly:
     57 
     58 .. function:: lookup(encoding)
     59 
     60    Looks up the codec info in the Python codec registry and returns a
     61    :class:`CodecInfo` object as defined below.
     62 
     63    Encodings are first looked up in the registry's cache. If not found, the list of
     64    registered search functions is scanned. If no :class:`CodecInfo` object is
     65    found, a :exc:`LookupError` is raised. Otherwise, the :class:`CodecInfo` object
     66    is stored in the cache and returned to the caller.
     67 
     68 .. class:: CodecInfo(encode, decode, streamreader=None, streamwriter=None, incrementalencoder=None, incrementaldecoder=None, name=None)
     69 
     70    Codec details when looking up the codec registry. The constructor
     71    arguments are stored in attributes of the same name:
     72 
     73 
     74    .. attribute:: name
     75 
     76       The name of the encoding.
     77 
     78 
     79    .. attribute:: encode
     80                   decode
     81 
     82       The stateless encoding and decoding functions. These must be
     83       functions or methods which have the same interface as
     84       the :meth:`~Codec.encode` and :meth:`~Codec.decode` methods of Codec
     85       instances (see :ref:`Codec Interface <codec-objects>`).
     86       The functions or methods are expected to work in a stateless mode.
     87 
     88 
     89    .. attribute:: incrementalencoder
     90                   incrementaldecoder
     91 
     92       Incremental encoder and decoder classes or factory functions.
     93       These have to provide the interface defined by the base classes
     94       :class:`IncrementalEncoder` and :class:`IncrementalDecoder`,
     95       respectively. Incremental codecs can maintain state.
     96 
     97 
     98    .. attribute:: streamwriter
     99                   streamreader
    100 
    101       Stream writer and reader classes or factory functions. These have to
    102       provide the interface defined by the base classes
    103       :class:`StreamWriter` and :class:`StreamReader`, respectively.
    104       Stream codecs can maintain state.
    105 
    106 To simplify access to the various codec components, the module provides
    107 these additional functions which use :func:`lookup` for the codec lookup:
    108 
    109 .. function:: getencoder(encoding)
    110 
    111    Look up the codec for the given encoding and return its encoder function.
    112 
    113    Raises a :exc:`LookupError` in case the encoding cannot be found.
    114 
    115 
    116 .. function:: getdecoder(encoding)
    117 
    118    Look up the codec for the given encoding and return its decoder function.
    119 
    120    Raises a :exc:`LookupError` in case the encoding cannot be found.
    121 
    122 
    123 .. function:: getincrementalencoder(encoding)
    124 
    125    Look up the codec for the given encoding and return its incremental encoder
    126    class or factory function.
    127 
    128    Raises a :exc:`LookupError` in case the encoding cannot be found or the codec
    129    doesn't support an incremental encoder.
    130 
    131 
    132 .. function:: getincrementaldecoder(encoding)
    133 
    134    Look up the codec for the given encoding and return its incremental decoder
    135    class or factory function.
    136 
    137    Raises a :exc:`LookupError` in case the encoding cannot be found or the codec
    138    doesn't support an incremental decoder.
    139 
    140 
    141 .. function:: getreader(encoding)
    142 
    143    Look up the codec for the given encoding and return its :class:`StreamReader`
    144    class or factory function.
    145 
    146    Raises a :exc:`LookupError` in case the encoding cannot be found.
    147 
    148 
    149 .. function:: getwriter(encoding)
    150 
    151    Look up the codec for the given encoding and return its :class:`StreamWriter`
    152    class or factory function.
    153 
    154    Raises a :exc:`LookupError` in case the encoding cannot be found.
    155 
    156 Custom codecs are made available by registering a suitable codec search
    157 function:
    158 
    159 .. function:: register(search_function)
    160 
    161    Register a codec search function. Search functions are expected to take one
    162    argument, being the encoding name in all lower case letters, and return a
    163    :class:`CodecInfo` object. In case a search function cannot find
    164    a given encoding, it should return ``None``.
    165 
    166    .. note::
    167 
    168       Search function registration is not currently reversible,
    169       which may cause problems in some cases, such as unit testing or
    170       module reloading.
    171 
    172 While the builtin :func:`open` and the associated :mod:`io` module are the
    173 recommended approach for working with encoded text files, this module
    174 provides additional utility functions and classes that allow the use of a
    175 wider range of codecs when working with binary files:
    176 
    177 .. function:: open(filename, mode='r', encoding=None, errors='strict', buffering=1)
    178 
    179    Open an encoded file using the given *mode* and return an instance of
    180    :class:`StreamReaderWriter`, providing transparent encoding/decoding.
    181    The default file mode is ``'r'``, meaning to open the file in read mode.
    182 
    183    .. note::
    184 
    185       Underlying encoded files are always opened in binary mode.
    186       No automatic conversion of ``'\n'`` is done on reading and writing.
    187       The *mode* argument may be any binary mode acceptable to the built-in
    188       :func:`open` function; the ``'b'`` is automatically added.
    189 
    190    *encoding* specifies the encoding which is to be used for the file.
    191    Any encoding that encodes to and decodes from bytes is allowed, and
    192    the data types supported by the file methods depend on the codec used.
    193 
    194    *errors* may be given to define the error handling. It defaults to ``'strict'``
    195    which causes a :exc:`ValueError` to be raised in case an encoding error occurs.
    196 
    197    *buffering* has the same meaning as for the built-in :func:`open` function.  It
    198    defaults to line buffered.
    199 
    200 
    201 .. function:: EncodedFile(file, data_encoding, file_encoding=None, errors='strict')
    202 
    203    Return a :class:`StreamRecoder` instance, a wrapped version of *file*
    204    which provides transparent transcoding. The original file is closed
    205    when the wrapped version is closed.
    206 
    207    Data written to the wrapped file is decoded according to the given
    208    *data_encoding* and then written to the original file as bytes using
    209    *file_encoding*. Bytes read from the original file are decoded
    210    according to *file_encoding*, and the result is encoded
    211    using *data_encoding*.
    212 
    213    If *file_encoding* is not given, it defaults to *data_encoding*.
    214 
    215    *errors* may be given to define the error handling. It defaults to
    216    ``'strict'``, which causes :exc:`ValueError` to be raised in case an encoding
    217    error occurs.
    218 
    219 
    220 .. function:: iterencode(iterator, encoding, errors='strict', **kwargs)
    221 
    222    Uses an incremental encoder to iteratively encode the input provided by
    223    *iterator*. This function is a :term:`generator`.
    224    The *errors* argument (as well as any
    225    other keyword argument) is passed through to the incremental encoder.
    226 
    227    This function requires that the codec accept text :class:`str` objects
    228    to encode. Therefore it does not support bytes-to-bytes encoders such as
    229    ``base64_codec``.
    230 
    231 
    232 .. function:: iterdecode(iterator, encoding, errors='strict', **kwargs)
    233 
    234    Uses an incremental decoder to iteratively decode the input provided by
    235    *iterator*. This function is a :term:`generator`.
    236    The *errors* argument (as well as any
    237    other keyword argument) is passed through to the incremental decoder.
    238 
    239    This function requires that the codec accept :class:`bytes` objects
    240    to decode. Therefore it does not support text-to-text encoders such as
    241    ``rot_13``, although ``rot_13`` may be used equivalently with
    242    :func:`iterencode`.
    243 
    244 
    245 The module also provides the following constants which are useful for reading
    246 and writing to platform dependent files:
    247 
    248 
    249 .. data:: BOM
    250           BOM_BE
    251           BOM_LE
    252           BOM_UTF8
    253           BOM_UTF16
    254           BOM_UTF16_BE
    255           BOM_UTF16_LE
    256           BOM_UTF32
    257           BOM_UTF32_BE
    258           BOM_UTF32_LE
    259 
    260    These constants define various byte sequences,
    261    being Unicode byte order marks (BOMs) for several encodings. They are
    262    used in UTF-16 and UTF-32 data streams to indicate the byte order used,
    263    and in UTF-8 as a Unicode signature. :const:`BOM_UTF16` is either
    264    :const:`BOM_UTF16_BE` or :const:`BOM_UTF16_LE` depending on the platform's
    265    native byte order, :const:`BOM` is an alias for :const:`BOM_UTF16`,
    266    :const:`BOM_LE` for :const:`BOM_UTF16_LE` and :const:`BOM_BE` for
    267    :const:`BOM_UTF16_BE`. The others represent the BOM in UTF-8 and UTF-32
    268    encodings.
    269 
    270 
    271 .. _codec-base-classes:
    272 
    273 Codec Base Classes
    274 ------------------
    275 
    276 The :mod:`codecs` module defines a set of base classes which define the
    277 interfaces for working with codec objects, and can also be used as the basis
    278 for custom codec implementations.
    279 
    280 Each codec has to define four interfaces to make it usable as codec in Python:
    281 stateless encoder, stateless decoder, stream reader and stream writer. The
    282 stream reader and writers typically reuse the stateless encoder/decoder to
    283 implement the file protocols. Codec authors also need to define how the
    284 codec will handle encoding and decoding errors.
    285 
    286 
    287 .. _surrogateescape:
    288 .. _error-handlers:
    289 
    290 Error Handlers
    291 ^^^^^^^^^^^^^^
    292 
    293 To simplify and standardize error handling,
    294 codecs may implement different error handling schemes by
    295 accepting the *errors* string argument.  The following string values are
    296 defined and implemented by all standard Python codecs:
    297 
    298 .. tabularcolumns:: |l|L|
    299 
    300 +-------------------------+-----------------------------------------------+
    301 | Value                   | Meaning                                       |
    302 +=========================+===============================================+
    303 | ``'strict'``            | Raise :exc:`UnicodeError` (or a subclass);    |
    304 |                         | this is the default.  Implemented in          |
    305 |                         | :func:`strict_errors`.                        |
    306 +-------------------------+-----------------------------------------------+
    307 | ``'ignore'``            | Ignore the malformed data and continue        |
    308 |                         | without further notice.  Implemented in       |
    309 |                         | :func:`ignore_errors`.                        |
    310 +-------------------------+-----------------------------------------------+
    311 
    312 The following error handlers are only applicable to
    313 :term:`text encodings <text encoding>`:
    314 
    315 +-------------------------+-----------------------------------------------+
    316 | Value                   | Meaning                                       |
    317 +=========================+===============================================+
    318 | ``'replace'``           | Replace with a suitable replacement           |
    319 |                         | marker; Python will use the official          |
    320 |                         | ``U+FFFD`` REPLACEMENT CHARACTER for the      |
    321 |                         | built-in codecs on decoding, and '?' on       |
    322 |                         | encoding.  Implemented in                     |
    323 |                         | :func:`replace_errors`.                       |
    324 +-------------------------+-----------------------------------------------+
    325 | ``'xmlcharrefreplace'`` | Replace with the appropriate XML character    |
    326 |                         | reference (only for encoding).  Implemented   |
    327 |                         | in :func:`xmlcharrefreplace_errors`.          |
    328 +-------------------------+-----------------------------------------------+
    329 | ``'backslashreplace'``  | Replace with backslashed escape sequences.    |
    330 |                         | Implemented in                                |
    331 |                         | :func:`backslashreplace_errors`.              |
    332 +-------------------------+-----------------------------------------------+
    333 | ``'namereplace'``       | Replace with ``\N{...}`` escape sequences     |
    334 |                         | (only for encoding).  Implemented in          |
    335 |                         | :func:`namereplace_errors`.                   |
    336 +-------------------------+-----------------------------------------------+
    337 | ``'surrogateescape'``   | On decoding, replace byte with individual     |
    338 |                         | surrogate code ranging from ``U+DC80`` to     |
    339 |                         | ``U+DCFF``.  This code will then be turned    |
    340 |                         | back into the same byte when the              |
    341 |                         | ``'surrogateescape'`` error handler is used   |
    342 |                         | when encoding the data.  (See :pep:`383` for  |
    343 |                         | more.)                                        |
    344 +-------------------------+-----------------------------------------------+
    345 
    346 In addition, the following error handler is specific to the given codecs:
    347 
    348 +-------------------+------------------------+-------------------------------------------+
    349 | Value             | Codecs                 | Meaning                                   |
    350 +===================+========================+===========================================+
    351 |``'surrogatepass'``| utf-8, utf-16, utf-32, | Allow encoding and decoding of surrogate  |
    352 |                   | utf-16-be, utf-16-le,  | codes.  These codecs normally treat the   |
    353 |                   | utf-32-be, utf-32-le   | presence of surrogates as an error.       |
    354 +-------------------+------------------------+-------------------------------------------+
    355 
    356 .. versionadded:: 3.1
    357    The ``'surrogateescape'`` and ``'surrogatepass'`` error handlers.
    358 
    359 .. versionchanged:: 3.4
    360    The ``'surrogatepass'`` error handlers now works with utf-16\* and utf-32\* codecs.
    361 
    362 .. versionadded:: 3.5
    363    The ``'namereplace'`` error handler.
    364 
    365 .. versionchanged:: 3.5
    366    The ``'backslashreplace'`` error handlers now works with decoding and
    367    translating.
    368 
    369 The set of allowed values can be extended by registering a new named error
    370 handler:
    371 
    372 .. function:: register_error(name, error_handler)
    373 
    374    Register the error handling function *error_handler* under the name *name*.
    375    The *error_handler* argument will be called during encoding and decoding
    376    in case of an error, when *name* is specified as the errors parameter.
    377 
    378    For encoding, *error_handler* will be called with a :exc:`UnicodeEncodeError`
    379    instance, which contains information about the location of the error. The
    380    error handler must either raise this or a different exception, or return a
    381    tuple with a replacement for the unencodable part of the input and a position
    382    where encoding should continue. The replacement may be either :class:`str` or
    383    :class:`bytes`.  If the replacement is bytes, the encoder will simply copy
    384    them into the output buffer. If the replacement is a string, the encoder will
    385    encode the replacement.  Encoding continues on original input at the
    386    specified position. Negative position values will be treated as being
    387    relative to the end of the input string. If the resulting position is out of
    388    bound an :exc:`IndexError` will be raised.
    389 
    390    Decoding and translating works similarly, except :exc:`UnicodeDecodeError` or
    391    :exc:`UnicodeTranslateError` will be passed to the handler and that the
    392    replacement from the error handler will be put into the output directly.
    393 
    394 
    395 Previously registered error handlers (including the standard error handlers)
    396 can be looked up by name:
    397 
    398 .. function:: lookup_error(name)
    399 
    400    Return the error handler previously registered under the name *name*.
    401 
    402    Raises a :exc:`LookupError` in case the handler cannot be found.
    403 
    404 The following standard error handlers are also made available as module level
    405 functions:
    406 
    407 .. function:: strict_errors(exception)
    408 
    409    Implements the ``'strict'`` error handling: each encoding or
    410    decoding error raises a :exc:`UnicodeError`.
    411 
    412 
    413 .. function:: replace_errors(exception)
    414 
    415    Implements the ``'replace'`` error handling (for :term:`text encodings
    416    <text encoding>` only): substitutes ``'?'`` for encoding errors
    417    (to be encoded by the codec), and ``'\ufffd'`` (the Unicode replacement
    418    character) for decoding errors.
    419 
    420 
    421 .. function:: ignore_errors(exception)
    422 
    423    Implements the ``'ignore'`` error handling: malformed data is ignored and
    424    encoding or decoding is continued without further notice.
    425 
    426 
    427 .. function:: xmlcharrefreplace_errors(exception)
    428 
    429    Implements the ``'xmlcharrefreplace'`` error handling (for encoding with
    430    :term:`text encodings <text encoding>` only): the
    431    unencodable character is replaced by an appropriate XML character reference.
    432 
    433 
    434 .. function:: backslashreplace_errors(exception)
    435 
    436    Implements the ``'backslashreplace'`` error handling (for
    437    :term:`text encodings <text encoding>` only): malformed data is
    438    replaced by a backslashed escape sequence.
    439 
    440 .. function:: namereplace_errors(exception)
    441 
    442    Implements the ``'namereplace'`` error handling (for encoding with
    443    :term:`text encodings <text encoding>` only): the
    444    unencodable character is replaced by a ``\N{...}`` escape sequence.
    445 
    446    .. versionadded:: 3.5
    447 
    448 
    449 .. _codec-objects:
    450 
    451 Stateless Encoding and Decoding
    452 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    453 
    454 The base :class:`Codec` class defines these methods which also define the
    455 function interfaces of the stateless encoder and decoder:
    456 
    457 
    458 .. method:: Codec.encode(input[, errors])
    459 
    460    Encodes the object *input* and returns a tuple (output object, length consumed).
    461    For instance, :term:`text encoding` converts
    462    a string object to a bytes object using a particular
    463    character set encoding (e.g., ``cp1252`` or ``iso-8859-1``).
    464 
    465    The *errors* argument defines the error handling to apply.
    466    It defaults to ``'strict'`` handling.
    467 
    468    The method may not store state in the :class:`Codec` instance. Use
    469    :class:`StreamWriter` for codecs which have to keep state in order to make
    470    encoding efficient.
    471 
    472    The encoder must be able to handle zero length input and return an empty object
    473    of the output object type in this situation.
    474 
    475 
    476 .. method:: Codec.decode(input[, errors])
    477 
    478    Decodes the object *input* and returns a tuple (output object, length
    479    consumed).  For instance, for a :term:`text encoding`, decoding converts
    480    a bytes object encoded using a particular
    481    character set encoding to a string object.
    482 
    483    For text encodings and bytes-to-bytes codecs,
    484    *input* must be a bytes object or one which provides the read-only
    485    buffer interface -- for example, buffer objects and memory mapped files.
    486 
    487    The *errors* argument defines the error handling to apply.
    488    It defaults to ``'strict'`` handling.
    489 
    490    The method may not store state in the :class:`Codec` instance. Use
    491    :class:`StreamReader` for codecs which have to keep state in order to make
    492    decoding efficient.
    493 
    494    The decoder must be able to handle zero length input and return an empty object
    495    of the output object type in this situation.
    496 
    497 
    498 Incremental Encoding and Decoding
    499 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    500 
    501 The :class:`IncrementalEncoder` and :class:`IncrementalDecoder` classes provide
    502 the basic interface for incremental encoding and decoding. Encoding/decoding the
    503 input isn't done with one call to the stateless encoder/decoder function, but
    504 with multiple calls to the
    505 :meth:`~IncrementalEncoder.encode`/:meth:`~IncrementalDecoder.decode` method of
    506 the incremental encoder/decoder. The incremental encoder/decoder keeps track of
    507 the encoding/decoding process during method calls.
    508 
    509 The joined output of calls to the
    510 :meth:`~IncrementalEncoder.encode`/:meth:`~IncrementalDecoder.decode` method is
    511 the same as if all the single inputs were joined into one, and this input was
    512 encoded/decoded with the stateless encoder/decoder.
    513 
    514 
    515 .. _incremental-encoder-objects:
    516 
    517 IncrementalEncoder Objects
    518 ~~~~~~~~~~~~~~~~~~~~~~~~~~
    519 
    520 The :class:`IncrementalEncoder` class is used for encoding an input in multiple
    521 steps. It defines the following methods which every incremental encoder must
    522 define in order to be compatible with the Python codec registry.
    523 
    524 
    525 .. class:: IncrementalEncoder(errors='strict')
    526 
    527    Constructor for an :class:`IncrementalEncoder` instance.
    528 
    529    All incremental encoders must provide this constructor interface. They are free
    530    to add additional keyword arguments, but only the ones defined here are used by
    531    the Python codec registry.
    532 
    533    The :class:`IncrementalEncoder` may implement different error handling schemes
    534    by providing the *errors* keyword argument. See :ref:`error-handlers` for
    535    possible values.
    536 
    537    The *errors* argument will be assigned to an attribute of the same name.
    538    Assigning to this attribute makes it possible to switch between different error
    539    handling strategies during the lifetime of the :class:`IncrementalEncoder`
    540    object.
    541 
    542 
    543    .. method:: encode(object[, final])
    544 
    545       Encodes *object* (taking the current state of the encoder into account)
    546       and returns the resulting encoded object. If this is the last call to
    547       :meth:`encode` *final* must be true (the default is false).
    548 
    549 
    550    .. method:: reset()
    551 
    552       Reset the encoder to the initial state. The output is discarded: call
    553       ``.encode(object, final=True)``, passing an empty byte or text string
    554       if necessary, to reset the encoder and to get the output.
    555 
    556 
    557 .. method:: IncrementalEncoder.getstate()
    558 
    559    Return the current state of the encoder which must be an integer. The
    560    implementation should make sure that ``0`` is the most common state. (States
    561    that are more complicated than integers can be converted into an integer by
    562    marshaling/pickling the state and encoding the bytes of the resulting string
    563    into an integer).
    564 
    565 
    566 .. method:: IncrementalEncoder.setstate(state)
    567 
    568    Set the state of the encoder to *state*. *state* must be an encoder state
    569    returned by :meth:`getstate`.
    570 
    571 
    572 .. _incremental-decoder-objects:
    573 
    574 IncrementalDecoder Objects
    575 ~~~~~~~~~~~~~~~~~~~~~~~~~~
    576 
    577 The :class:`IncrementalDecoder` class is used for decoding an input in multiple
    578 steps. It defines the following methods which every incremental decoder must
    579 define in order to be compatible with the Python codec registry.
    580 
    581 
    582 .. class:: IncrementalDecoder(errors='strict')
    583 
    584    Constructor for an :class:`IncrementalDecoder` instance.
    585 
    586    All incremental decoders must provide this constructor interface. They are free
    587    to add additional keyword arguments, but only the ones defined here are used by
    588    the Python codec registry.
    589 
    590    The :class:`IncrementalDecoder` may implement different error handling schemes
    591    by providing the *errors* keyword argument. See :ref:`error-handlers` for
    592    possible values.
    593 
    594    The *errors* argument will be assigned to an attribute of the same name.
    595    Assigning to this attribute makes it possible to switch between different error
    596    handling strategies during the lifetime of the :class:`IncrementalDecoder`
    597    object.
    598 
    599 
    600    .. method:: decode(object[, final])
    601 
    602       Decodes *object* (taking the current state of the decoder into account)
    603       and returns the resulting decoded object. If this is the last call to
    604       :meth:`decode` *final* must be true (the default is false). If *final* is
    605       true the decoder must decode the input completely and must flush all
    606       buffers. If this isn't possible (e.g. because of incomplete byte sequences
    607       at the end of the input) it must initiate error handling just like in the
    608       stateless case (which might raise an exception).
    609 
    610 
    611    .. method:: reset()
    612 
    613       Reset the decoder to the initial state.
    614 
    615 
    616    .. method:: getstate()
    617 
    618       Return the current state of the decoder. This must be a tuple with two
    619       items, the first must be the buffer containing the still undecoded
    620       input. The second must be an integer and can be additional state
    621       info. (The implementation should make sure that ``0`` is the most common
    622       additional state info.) If this additional state info is ``0`` it must be
    623       possible to set the decoder to the state which has no input buffered and
    624       ``0`` as the additional state info, so that feeding the previously
    625       buffered input to the decoder returns it to the previous state without
    626       producing any output. (Additional state info that is more complicated than
    627       integers can be converted into an integer by marshaling/pickling the info
    628       and encoding the bytes of the resulting string into an integer.)
    629 
    630 
    631    .. method:: setstate(state)
    632 
    633       Set the state of the encoder to *state*. *state* must be a decoder state
    634       returned by :meth:`getstate`.
    635 
    636 
    637 Stream Encoding and Decoding
    638 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    639 
    640 
    641 The :class:`StreamWriter` and :class:`StreamReader` classes provide generic
    642 working interfaces which can be used to implement new encoding submodules very
    643 easily. See :mod:`encodings.utf_8` for an example of how this is done.
    644 
    645 
    646 .. _stream-writer-objects:
    647 
    648 StreamWriter Objects
    649 ~~~~~~~~~~~~~~~~~~~~
    650 
    651 The :class:`StreamWriter` class is a subclass of :class:`Codec` and defines the
    652 following methods which every stream writer must define in order to be
    653 compatible with the Python codec registry.
    654 
    655 
    656 .. class:: StreamWriter(stream, errors='strict')
    657 
    658    Constructor for a :class:`StreamWriter` instance.
    659 
    660    All stream writers must provide this constructor interface. They are free to add
    661    additional keyword arguments, but only the ones defined here are used by the
    662    Python codec registry.
    663 
    664    The *stream* argument must be a file-like object open for writing
    665    text or binary data, as appropriate for the specific codec.
    666 
    667    The :class:`StreamWriter` may implement different error handling schemes by
    668    providing the *errors* keyword argument. See :ref:`error-handlers` for
    669    the standard error handlers the underlying stream codec may support.
    670 
    671    The *errors* argument will be assigned to an attribute of the same name.
    672    Assigning to this attribute makes it possible to switch between different error
    673    handling strategies during the lifetime of the :class:`StreamWriter` object.
    674 
    675    .. method:: write(object)
    676 
    677       Writes the object's contents encoded to the stream.
    678 
    679 
    680    .. method:: writelines(list)
    681 
    682       Writes the concatenated list of strings to the stream (possibly by reusing
    683       the :meth:`write` method). The standard bytes-to-bytes codecs
    684       do not support this method.
    685 
    686 
    687    .. method:: reset()
    688 
    689       Flushes and resets the codec buffers used for keeping state.
    690 
    691       Calling this method should ensure that the data on the output is put into
    692       a clean state that allows appending of new fresh data without having to
    693       rescan the whole stream to recover state.
    694 
    695 
    696 In addition to the above methods, the :class:`StreamWriter` must also inherit
    697 all other methods and attributes from the underlying stream.
    698 
    699 
    700 .. _stream-reader-objects:
    701 
    702 StreamReader Objects
    703 ~~~~~~~~~~~~~~~~~~~~
    704 
    705 The :class:`StreamReader` class is a subclass of :class:`Codec` and defines the
    706 following methods which every stream reader must define in order to be
    707 compatible with the Python codec registry.
    708 
    709 
    710 .. class:: StreamReader(stream, errors='strict')
    711 
    712    Constructor for a :class:`StreamReader` instance.
    713 
    714    All stream readers must provide this constructor interface. They are free to add
    715    additional keyword arguments, but only the ones defined here are used by the
    716    Python codec registry.
    717 
    718    The *stream* argument must be a file-like object open for reading
    719    text or binary data, as appropriate for the specific codec.
    720 
    721    The :class:`StreamReader` may implement different error handling schemes by
    722    providing the *errors* keyword argument. See :ref:`error-handlers` for
    723    the standard error handlers the underlying stream codec may support.
    724 
    725    The *errors* argument will be assigned to an attribute of the same name.
    726    Assigning to this attribute makes it possible to switch between different error
    727    handling strategies during the lifetime of the :class:`StreamReader` object.
    728 
    729    The set of allowed values for the *errors* argument can be extended with
    730    :func:`register_error`.
    731 
    732 
    733    .. method:: read([size[, chars, [firstline]]])
    734 
    735       Decodes data from the stream and returns the resulting object.
    736 
    737       The *chars* argument indicates the number of decoded
    738       code points or bytes to return. The :func:`read` method will
    739       never return more data than requested, but it might return less,
    740       if there is not enough available.
    741 
    742       The *size* argument indicates the approximate maximum
    743       number of encoded bytes or code points to read
    744       for decoding. The decoder can modify this setting as
    745       appropriate. The default value -1 indicates to read and decode as much as
    746       possible.  This parameter is intended to
    747       prevent having to decode huge files in one step.
    748 
    749       The *firstline* flag indicates that
    750       it would be sufficient to only return the first
    751       line, if there are decoding errors on later lines.
    752 
    753       The method should use a greedy read strategy meaning that it should read
    754       as much data as is allowed within the definition of the encoding and the
    755       given size, e.g.  if optional encoding endings or state markers are
    756       available on the stream, these should be read too.
    757 
    758 
    759    .. method:: readline([size[, keepends]])
    760 
    761       Read one line from the input stream and return the decoded data.
    762 
    763       *size*, if given, is passed as size argument to the stream's
    764       :meth:`read` method.
    765 
    766       If *keepends* is false line-endings will be stripped from the lines
    767       returned.
    768 
    769 
    770    .. method:: readlines([sizehint[, keepends]])
    771 
    772       Read all lines available on the input stream and return them as a list of
    773       lines.
    774 
    775       Line-endings are implemented using the codec's decoder method and are
    776       included in the list entries if *keepends* is true.
    777 
    778       *sizehint*, if given, is passed as the *size* argument to the stream's
    779       :meth:`read` method.
    780 
    781 
    782    .. method:: reset()
    783 
    784       Resets the codec buffers used for keeping state.
    785 
    786       Note that no stream repositioning should take place.  This method is
    787       primarily intended to be able to recover from decoding errors.
    788 
    789 
    790 In addition to the above methods, the :class:`StreamReader` must also inherit
    791 all other methods and attributes from the underlying stream.
    792 
    793 .. _stream-reader-writer:
    794 
    795 StreamReaderWriter Objects
    796 ~~~~~~~~~~~~~~~~~~~~~~~~~~
    797 
    798 The :class:`StreamReaderWriter` is a convenience class that allows wrapping
    799 streams which work in both read and write modes.
    800 
    801 The design is such that one can use the factory functions returned by the
    802 :func:`lookup` function to construct the instance.
    803 
    804 
    805 .. class:: StreamReaderWriter(stream, Reader, Writer, errors)
    806 
    807    Creates a :class:`StreamReaderWriter` instance. *stream* must be a file-like
    808    object. *Reader* and *Writer* must be factory functions or classes providing the
    809    :class:`StreamReader` and :class:`StreamWriter` interface resp. Error handling
    810    is done in the same way as defined for the stream readers and writers.
    811 
    812 :class:`StreamReaderWriter` instances define the combined interfaces of
    813 :class:`StreamReader` and :class:`StreamWriter` classes. They inherit all other
    814 methods and attributes from the underlying stream.
    815 
    816 
    817 .. _stream-recoder-objects:
    818 
    819 StreamRecoder Objects
    820 ~~~~~~~~~~~~~~~~~~~~~
    821 
    822 The :class:`StreamRecoder` translates data from one encoding to another,
    823 which is sometimes useful when dealing with different encoding environments.
    824 
    825 The design is such that one can use the factory functions returned by the
    826 :func:`lookup` function to construct the instance.
    827 
    828 
    829 .. class:: StreamRecoder(stream, encode, decode, Reader, Writer, errors)
    830 
    831    Creates a :class:`StreamRecoder` instance which implements a two-way conversion:
    832    *encode* and *decode* work on the frontend the data visible to
    833    code calling :meth:`read` and :meth:`write`, while *Reader* and *Writer*
    834    work on the backend the data in *stream*.
    835 
    836    You can use these objects to do transparent transcodings from e.g. Latin-1
    837    to UTF-8 and back.
    838 
    839    The *stream* argument must be a file-like object.
    840 
    841    The *encode* and *decode* arguments must
    842    adhere to the :class:`Codec` interface. *Reader* and
    843    *Writer* must be factory functions or classes providing objects of the
    844    :class:`StreamReader` and :class:`StreamWriter` interface respectively.
    845 
    846    Error handling is done in the same way as defined for the stream readers and
    847    writers.
    848 
    849 
    850 :class:`StreamRecoder` instances define the combined interfaces of
    851 :class:`StreamReader` and :class:`StreamWriter` classes. They inherit all other
    852 methods and attributes from the underlying stream.
    853 
    854 
    855 .. _encodings-overview:
    856 
    857 Encodings and Unicode
    858 ---------------------
    859 
    860 Strings are stored internally as sequences of code points in
    861 range ``0x0``--``0x10FFFF``.  (See :pep:`393` for
    862 more details about the implementation.)
    863 Once a string object is used outside of CPU and memory, endianness
    864 and how these arrays are stored as bytes become an issue.  As with other
    865 codecs, serialising a string into a sequence of bytes is known as *encoding*,
    866 and recreating the string from the sequence of bytes is known as *decoding*.
    867 There are a variety of different text serialisation codecs, which are
    868 collectivity referred to as :term:`text encodings <text encoding>`.
    869 
    870 The simplest text encoding (called ``'latin-1'`` or ``'iso-8859-1'``) maps
    871 the code points 0--255 to the bytes ``0x0``--``0xff``, which means that a string
    872 object that contains code points above ``U+00FF`` can't be encoded with this
    873 codec. Doing so will raise a :exc:`UnicodeEncodeError` that looks
    874 like the following (although the details of the error message may differ):
    875 ``UnicodeEncodeError: 'latin-1' codec can't encode character '\u1234' in
    876 position 3: ordinal not in range(256)``.
    877 
    878 There's another group of encodings (the so called charmap encodings) that choose
    879 a different subset of all Unicode code points and how these code points are
    880 mapped to the bytes ``0x0``--``0xff``. To see how this is done simply open
    881 e.g. :file:`encodings/cp1252.py` (which is an encoding that is used primarily on
    882 Windows). There's a string constant with 256 characters that shows you which
    883 character is mapped to which byte value.
    884 
    885 All of these encodings can only encode 256 of the 1114112 code points
    886 defined in Unicode. A simple and straightforward way that can store each Unicode
    887 code point, is to store each code point as four consecutive bytes. There are two
    888 possibilities: store the bytes in big endian or in little endian order. These
    889 two encodings are called ``UTF-32-BE`` and ``UTF-32-LE`` respectively. Their
    890 disadvantage is that if e.g. you use ``UTF-32-BE`` on a little endian machine you
    891 will always have to swap bytes on encoding and decoding. ``UTF-32`` avoids this
    892 problem: bytes will always be in natural endianness. When these bytes are read
    893 by a CPU with a different endianness, then bytes have to be swapped though. To
    894 be able to detect the endianness of a ``UTF-16`` or ``UTF-32`` byte sequence,
    895 there's the so called BOM ("Byte Order Mark"). This is the Unicode character
    896 ``U+FEFF``. This character can be prepended to every ``UTF-16`` or ``UTF-32``
    897 byte sequence. The byte swapped version of this character (``0xFFFE``) is an
    898 illegal character that may not appear in a Unicode text. So when the
    899 first character in an ``UTF-16`` or ``UTF-32`` byte sequence
    900 appears to be a ``U+FFFE`` the bytes have to be swapped on decoding.
    901 Unfortunately the character ``U+FEFF`` had a second purpose as
    902 a ``ZERO WIDTH NO-BREAK SPACE``: a character that has no width and doesn't allow
    903 a word to be split. It can e.g. be used to give hints to a ligature algorithm.
    904 With Unicode 4.0 using ``U+FEFF`` as a ``ZERO WIDTH NO-BREAK SPACE`` has been
    905 deprecated (with ``U+2060`` (``WORD JOINER``) assuming this role). Nevertheless
    906 Unicode software still must be able to handle ``U+FEFF`` in both roles: as a BOM
    907 it's a device to determine the storage layout of the encoded bytes, and vanishes
    908 once the byte sequence has been decoded into a string; as a ``ZERO WIDTH
    909 NO-BREAK SPACE`` it's a normal character that will be decoded like any other.
    910 
    911 There's another encoding that is able to encoding the full range of Unicode
    912 characters: UTF-8. UTF-8 is an 8-bit encoding, which means there are no issues
    913 with byte order in UTF-8. Each byte in a UTF-8 byte sequence consists of two
    914 parts: marker bits (the most significant bits) and payload bits. The marker bits
    915 are a sequence of zero to four ``1`` bits followed by a ``0`` bit. Unicode characters are
    916 encoded like this (with x being payload bits, which when concatenated give the
    917 Unicode character):
    918 
    919 +-----------------------------------+----------------------------------------------+
    920 | Range                             | Encoding                                     |
    921 +===================================+==============================================+
    922 | ``U-00000000`` ... ``U-0000007F`` | 0xxxxxxx                                     |
    923 +-----------------------------------+----------------------------------------------+
    924 | ``U-00000080`` ... ``U-000007FF`` | 110xxxxx 10xxxxxx                            |
    925 +-----------------------------------+----------------------------------------------+
    926 | ``U-00000800`` ... ``U-0000FFFF`` | 1110xxxx 10xxxxxx 10xxxxxx                   |
    927 +-----------------------------------+----------------------------------------------+
    928 | ``U-00010000`` ... ``U-0010FFFF`` | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx          |
    929 +-----------------------------------+----------------------------------------------+
    930 
    931 The least significant bit of the Unicode character is the rightmost x bit.
    932 
    933 As UTF-8 is an 8-bit encoding no BOM is required and any ``U+FEFF`` character in
    934 the decoded string (even if it's the first character) is treated as a ``ZERO
    935 WIDTH NO-BREAK SPACE``.
    936 
    937 Without external information it's impossible to reliably determine which
    938 encoding was used for encoding a string. Each charmap encoding can
    939 decode any random byte sequence. However that's not possible with UTF-8, as
    940 UTF-8 byte sequences have a structure that doesn't allow arbitrary byte
    941 sequences. To increase the reliability with which a UTF-8 encoding can be
    942 detected, Microsoft invented a variant of UTF-8 (that Python 2.5 calls
    943 ``"utf-8-sig"``) for its Notepad program: Before any of the Unicode characters
    944 is written to the file, a UTF-8 encoded BOM (which looks like this as a byte
    945 sequence: ``0xef``, ``0xbb``, ``0xbf``) is written. As it's rather improbable
    946 that any charmap encoded file starts with these byte values (which would e.g.
    947 map to
    948 
    949    | LATIN SMALL LETTER I WITH DIAERESIS
    950    | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
    951    | INVERTED QUESTION MARK
    952 
    953 in iso-8859-1), this increases the probability that a ``utf-8-sig`` encoding can be
    954 correctly guessed from the byte sequence. So here the BOM is not used to be able
    955 to determine the byte order used for generating the byte sequence, but as a
    956 signature that helps in guessing the encoding. On encoding the utf-8-sig codec
    957 will write ``0xef``, ``0xbb``, ``0xbf`` as the first three bytes to the file. On
    958 decoding ``utf-8-sig`` will skip those three bytes if they appear as the first
    959 three bytes in the file.  In UTF-8, the use of the BOM is discouraged and
    960 should generally be avoided.
    961 
    962 
    963 .. _standard-encodings:
    964 
    965 Standard Encodings
    966 ------------------
    967 
    968 Python comes with a number of codecs built-in, either implemented as C functions
    969 or with dictionaries as mapping tables. The following table lists the codecs by
    970 name, together with a few common aliases, and the languages for which the
    971 encoding is likely used. Neither the list of aliases nor the list of languages
    972 is meant to be exhaustive. Notice that spelling alternatives that only differ in
    973 case or use a hyphen instead of an underscore are also valid aliases; therefore,
    974 e.g. ``'utf-8'`` is a valid alias for the ``'utf_8'`` codec.
    975 
    976 .. impl-detail::
    977 
    978    Some common encodings can bypass the codecs lookup machinery to
    979    improve performance.  These optimization opportunities are only
    980    recognized by CPython for a limited set of aliases: utf-8, utf8,
    981    latin-1, latin1, iso-8859-1, mbcs (Windows only), ascii, utf-16,
    982    and utf-32.  Using alternative spellings for these encodings may
    983    result in slower execution.
    984 
    985 Many of the character sets support the same languages. They vary in individual
    986 characters (e.g. whether the EURO SIGN is supported or not), and in the
    987 assignment of characters to code positions. For the European languages in
    988 particular, the following variants typically exist:
    989 
    990 * an ISO 8859 codeset
    991 
    992 * a Microsoft Windows code page, which is typically derived from an 8859 codeset,
    993   but replaces control characters with additional graphic characters
    994 
    995 * an IBM EBCDIC code page
    996 
    997 * an IBM PC code page, which is ASCII compatible
    998 
    999 .. tabularcolumns:: |l|p{0.3\linewidth}|p{0.3\linewidth}|
   1000 
   1001 +-----------------+--------------------------------+--------------------------------+
   1002 | Codec           | Aliases                        | Languages                      |
   1003 +=================+================================+================================+
   1004 | ascii           | 646, us-ascii                  | English                        |
   1005 +-----------------+--------------------------------+--------------------------------+
   1006 | big5            | big5-tw, csbig5                | Traditional Chinese            |
   1007 +-----------------+--------------------------------+--------------------------------+
   1008 | big5hkscs       | big5-hkscs, hkscs              | Traditional Chinese            |
   1009 +-----------------+--------------------------------+--------------------------------+
   1010 | cp037           | IBM037, IBM039                 | English                        |
   1011 +-----------------+--------------------------------+--------------------------------+
   1012 | cp273           | 273, IBM273, csIBM273          | German                         |
   1013 |                 |                                |                                |
   1014 |                 |                                | .. versionadded:: 3.4          |
   1015 +-----------------+--------------------------------+--------------------------------+
   1016 | cp424           | EBCDIC-CP-HE, IBM424           | Hebrew                         |
   1017 +-----------------+--------------------------------+--------------------------------+
   1018 | cp437           | 437, IBM437                    | English                        |
   1019 +-----------------+--------------------------------+--------------------------------+
   1020 | cp500           | EBCDIC-CP-BE, EBCDIC-CP-CH,    | Western Europe                 |
   1021 |                 | IBM500                         |                                |
   1022 +-----------------+--------------------------------+--------------------------------+
   1023 | cp720           |                                | Arabic                         |
   1024 +-----------------+--------------------------------+--------------------------------+
   1025 | cp737           |                                | Greek                          |
   1026 +-----------------+--------------------------------+--------------------------------+
   1027 | cp775           | IBM775                         | Baltic languages               |
   1028 +-----------------+--------------------------------+--------------------------------+
   1029 | cp850           | 850, IBM850                    | Western Europe                 |
   1030 +-----------------+--------------------------------+--------------------------------+
   1031 | cp852           | 852, IBM852                    | Central and Eastern Europe     |
   1032 +-----------------+--------------------------------+--------------------------------+
   1033 | cp855           | 855, IBM855                    | Bulgarian, Byelorussian,       |
   1034 |                 |                                | Macedonian, Russian, Serbian   |
   1035 +-----------------+--------------------------------+--------------------------------+
   1036 | cp856           |                                | Hebrew                         |
   1037 +-----------------+--------------------------------+--------------------------------+
   1038 | cp857           | 857, IBM857                    | Turkish                        |
   1039 +-----------------+--------------------------------+--------------------------------+
   1040 | cp858           | 858, IBM858                    | Western Europe                 |
   1041 +-----------------+--------------------------------+--------------------------------+
   1042 | cp860           | 860, IBM860                    | Portuguese                     |
   1043 +-----------------+--------------------------------+--------------------------------+
   1044 | cp861           | 861, CP-IS, IBM861             | Icelandic                      |
   1045 +-----------------+--------------------------------+--------------------------------+
   1046 | cp862           | 862, IBM862                    | Hebrew                         |
   1047 +-----------------+--------------------------------+--------------------------------+
   1048 | cp863           | 863, IBM863                    | Canadian                       |
   1049 +-----------------+--------------------------------+--------------------------------+
   1050 | cp864           | IBM864                         | Arabic                         |
   1051 +-----------------+--------------------------------+--------------------------------+
   1052 | cp865           | 865, IBM865                    | Danish, Norwegian              |
   1053 +-----------------+--------------------------------+--------------------------------+
   1054 | cp866           | 866, IBM866                    | Russian                        |
   1055 +-----------------+--------------------------------+--------------------------------+
   1056 | cp869           | 869, CP-GR, IBM869             | Greek                          |
   1057 +-----------------+--------------------------------+--------------------------------+
   1058 | cp874           |                                | Thai                           |
   1059 +-----------------+--------------------------------+--------------------------------+
   1060 | cp875           |                                | Greek                          |
   1061 +-----------------+--------------------------------+--------------------------------+
   1062 | cp932           | 932, ms932, mskanji, ms-kanji  | Japanese                       |
   1063 +-----------------+--------------------------------+--------------------------------+
   1064 | cp949           | 949, ms949, uhc                | Korean                         |
   1065 +-----------------+--------------------------------+--------------------------------+
   1066 | cp950           | 950, ms950                     | Traditional Chinese            |
   1067 +-----------------+--------------------------------+--------------------------------+
   1068 | cp1006          |                                | Urdu                           |
   1069 +-----------------+--------------------------------+--------------------------------+
   1070 | cp1026          | ibm1026                        | Turkish                        |
   1071 +-----------------+--------------------------------+--------------------------------+
   1072 | cp1125          | 1125, ibm1125, cp866u, ruscii  | Ukrainian                      |
   1073 |                 |                                |                                |
   1074 |                 |                                | .. versionadded:: 3.4          |
   1075 +-----------------+--------------------------------+--------------------------------+
   1076 | cp1140          | ibm1140                        | Western Europe                 |
   1077 +-----------------+--------------------------------+--------------------------------+
   1078 | cp1250          | windows-1250                   | Central and Eastern Europe     |
   1079 +-----------------+--------------------------------+--------------------------------+
   1080 | cp1251          | windows-1251                   | Bulgarian, Byelorussian,       |
   1081 |                 |                                | Macedonian, Russian, Serbian   |
   1082 +-----------------+--------------------------------+--------------------------------+
   1083 | cp1252          | windows-1252                   | Western Europe                 |
   1084 +-----------------+--------------------------------+--------------------------------+
   1085 | cp1253          | windows-1253                   | Greek                          |
   1086 +-----------------+--------------------------------+--------------------------------+
   1087 | cp1254          | windows-1254                   | Turkish                        |
   1088 +-----------------+--------------------------------+--------------------------------+
   1089 | cp1255          | windows-1255                   | Hebrew                         |
   1090 +-----------------+--------------------------------+--------------------------------+
   1091 | cp1256          | windows-1256                   | Arabic                         |
   1092 +-----------------+--------------------------------+--------------------------------+
   1093 | cp1257          | windows-1257                   | Baltic languages               |
   1094 +-----------------+--------------------------------+--------------------------------+
   1095 | cp1258          | windows-1258                   | Vietnamese                     |
   1096 +-----------------+--------------------------------+--------------------------------+
   1097 | cp65001         |                                | Windows only: Windows UTF-8    |
   1098 |                 |                                | (``CP_UTF8``)                  |
   1099 |                 |                                |                                |
   1100 |                 |                                | .. versionadded:: 3.3          |
   1101 +-----------------+--------------------------------+--------------------------------+
   1102 | euc_jp          | eucjp, ujis, u-jis             | Japanese                       |
   1103 +-----------------+--------------------------------+--------------------------------+
   1104 | euc_jis_2004    | jisx0213, eucjis2004           | Japanese                       |
   1105 +-----------------+--------------------------------+--------------------------------+
   1106 | euc_jisx0213    | eucjisx0213                    | Japanese                       |
   1107 +-----------------+--------------------------------+--------------------------------+
   1108 | euc_kr          | euckr, korean, ksc5601,        | Korean                         |
   1109 |                 | ks_c-5601, ks_c-5601-1987,     |                                |
   1110 |                 | ksx1001, ks_x-1001             |                                |
   1111 +-----------------+--------------------------------+--------------------------------+
   1112 | gb2312          | chinese, csiso58gb231280, euc- | Simplified Chinese             |
   1113 |                 | cn, euccn, eucgb2312-cn,       |                                |
   1114 |                 | gb2312-1980, gb2312-80, iso-   |                                |
   1115 |                 | ir-58                          |                                |
   1116 +-----------------+--------------------------------+--------------------------------+
   1117 | gbk             | 936, cp936, ms936              | Unified Chinese                |
   1118 +-----------------+--------------------------------+--------------------------------+
   1119 | gb18030         | gb18030-2000                   | Unified Chinese                |
   1120 +-----------------+--------------------------------+--------------------------------+
   1121 | hz              | hzgb, hz-gb, hz-gb-2312        | Simplified Chinese             |
   1122 +-----------------+--------------------------------+--------------------------------+
   1123 | iso2022_jp      | csiso2022jp, iso2022jp,        | Japanese                       |
   1124 |                 | iso-2022-jp                    |                                |
   1125 +-----------------+--------------------------------+--------------------------------+
   1126 | iso2022_jp_1    | iso2022jp-1, iso-2022-jp-1     | Japanese                       |
   1127 +-----------------+--------------------------------+--------------------------------+
   1128 | iso2022_jp_2    | iso2022jp-2, iso-2022-jp-2     | Japanese, Korean, Simplified   |
   1129 |                 |                                | Chinese, Western Europe, Greek |
   1130 +-----------------+--------------------------------+--------------------------------+
   1131 | iso2022_jp_2004 | iso2022jp-2004,                | Japanese                       |
   1132 |                 | iso-2022-jp-2004               |                                |
   1133 +-----------------+--------------------------------+--------------------------------+
   1134 | iso2022_jp_3    | iso2022jp-3, iso-2022-jp-3     | Japanese                       |
   1135 +-----------------+--------------------------------+--------------------------------+
   1136 | iso2022_jp_ext  | iso2022jp-ext, iso-2022-jp-ext | Japanese                       |
   1137 +-----------------+--------------------------------+--------------------------------+
   1138 | iso2022_kr      | csiso2022kr, iso2022kr,        | Korean                         |
   1139 |                 | iso-2022-kr                    |                                |
   1140 +-----------------+--------------------------------+--------------------------------+
   1141 | latin_1         | iso-8859-1, iso8859-1, 8859,   | West Europe                    |
   1142 |                 | cp819, latin, latin1, L1       |                                |
   1143 +-----------------+--------------------------------+--------------------------------+
   1144 | iso8859_2       | iso-8859-2, latin2, L2         | Central and Eastern Europe     |
   1145 +-----------------+--------------------------------+--------------------------------+
   1146 | iso8859_3       | iso-8859-3, latin3, L3         | Esperanto, Maltese             |
   1147 +-----------------+--------------------------------+--------------------------------+
   1148 | iso8859_4       | iso-8859-4, latin4, L4         | Baltic languages               |
   1149 +-----------------+--------------------------------+--------------------------------+
   1150 | iso8859_5       | iso-8859-5, cyrillic           | Bulgarian, Byelorussian,       |
   1151 |                 |                                | Macedonian, Russian, Serbian   |
   1152 +-----------------+--------------------------------+--------------------------------+
   1153 | iso8859_6       | iso-8859-6, arabic             | Arabic                         |
   1154 +-----------------+--------------------------------+--------------------------------+
   1155 | iso8859_7       | iso-8859-7, greek, greek8      | Greek                          |
   1156 +-----------------+--------------------------------+--------------------------------+
   1157 | iso8859_8       | iso-8859-8, hebrew             | Hebrew                         |
   1158 +-----------------+--------------------------------+--------------------------------+
   1159 | iso8859_9       | iso-8859-9, latin5, L5         | Turkish                        |
   1160 +-----------------+--------------------------------+--------------------------------+
   1161 | iso8859_10      | iso-8859-10, latin6, L6        | Nordic languages               |
   1162 +-----------------+--------------------------------+--------------------------------+
   1163 | iso8859_11      | iso-8859-11, thai              | Thai languages                 |
   1164 +-----------------+--------------------------------+--------------------------------+
   1165 | iso8859_13      | iso-8859-13, latin7, L7        | Baltic languages               |
   1166 +-----------------+--------------------------------+--------------------------------+
   1167 | iso8859_14      | iso-8859-14, latin8, L8        | Celtic languages               |
   1168 +-----------------+--------------------------------+--------------------------------+
   1169 | iso8859_15      | iso-8859-15, latin9, L9        | Western Europe                 |
   1170 +-----------------+--------------------------------+--------------------------------+
   1171 | iso8859_16      | iso-8859-16, latin10, L10      | South-Eastern Europe           |
   1172 +-----------------+--------------------------------+--------------------------------+
   1173 | johab           | cp1361, ms1361                 | Korean                         |
   1174 +-----------------+--------------------------------+--------------------------------+
   1175 | koi8_r          |                                | Russian                        |
   1176 +-----------------+--------------------------------+--------------------------------+
   1177 | koi8_t          |                                | Tajik                          |
   1178 |                 |                                |                                |
   1179 |                 |                                | .. versionadded:: 3.5          |
   1180 +-----------------+--------------------------------+--------------------------------+
   1181 | koi8_u          |                                | Ukrainian                      |
   1182 +-----------------+--------------------------------+--------------------------------+
   1183 | kz1048          | kz_1048, strk1048_2002, rk1048 | Kazakh                         |
   1184 |                 |                                |                                |
   1185 |                 |                                | .. versionadded:: 3.5          |
   1186 +-----------------+--------------------------------+--------------------------------+
   1187 | mac_cyrillic    | maccyrillic                    | Bulgarian, Byelorussian,       |
   1188 |                 |                                | Macedonian, Russian, Serbian   |
   1189 +-----------------+--------------------------------+--------------------------------+
   1190 | mac_greek       | macgreek                       | Greek                          |
   1191 +-----------------+--------------------------------+--------------------------------+
   1192 | mac_iceland     | maciceland                     | Icelandic                      |
   1193 +-----------------+--------------------------------+--------------------------------+
   1194 | mac_latin2      | maclatin2, maccentraleurope    | Central and Eastern Europe     |
   1195 +-----------------+--------------------------------+--------------------------------+
   1196 | mac_roman       | macroman, macintosh            | Western Europe                 |
   1197 +-----------------+--------------------------------+--------------------------------+
   1198 | mac_turkish     | macturkish                     | Turkish                        |
   1199 +-----------------+--------------------------------+--------------------------------+
   1200 | ptcp154         | csptcp154, pt154, cp154,       | Kazakh                         |
   1201 |                 | cyrillic-asian                 |                                |
   1202 +-----------------+--------------------------------+--------------------------------+
   1203 | shift_jis       | csshiftjis, shiftjis, sjis,    | Japanese                       |
   1204 |                 | s_jis                          |                                |
   1205 +-----------------+--------------------------------+--------------------------------+
   1206 | shift_jis_2004  | shiftjis2004, sjis_2004,       | Japanese                       |
   1207 |                 | sjis2004                       |                                |
   1208 +-----------------+--------------------------------+--------------------------------+
   1209 | shift_jisx0213  | shiftjisx0213, sjisx0213,      | Japanese                       |
   1210 |                 | s_jisx0213                     |                                |
   1211 +-----------------+--------------------------------+--------------------------------+
   1212 | utf_32          | U32, utf32                     | all languages                  |
   1213 +-----------------+--------------------------------+--------------------------------+
   1214 | utf_32_be       | UTF-32BE                       | all languages                  |
   1215 +-----------------+--------------------------------+--------------------------------+
   1216 | utf_32_le       | UTF-32LE                       | all languages                  |
   1217 +-----------------+--------------------------------+--------------------------------+
   1218 | utf_16          | U16, utf16                     | all languages                  |
   1219 +-----------------+--------------------------------+--------------------------------+
   1220 | utf_16_be       | UTF-16BE                       | all languages                  |
   1221 +-----------------+--------------------------------+--------------------------------+
   1222 | utf_16_le       | UTF-16LE                       | all languages                  |
   1223 +-----------------+--------------------------------+--------------------------------+
   1224 | utf_7           | U7, unicode-1-1-utf-7          | all languages                  |
   1225 +-----------------+--------------------------------+--------------------------------+
   1226 | utf_8           | U8, UTF, utf8                  | all languages                  |
   1227 +-----------------+--------------------------------+--------------------------------+
   1228 | utf_8_sig       |                                | all languages                  |
   1229 +-----------------+--------------------------------+--------------------------------+
   1230 
   1231 .. versionchanged:: 3.4
   1232    The utf-16\* and utf-32\* encoders no longer allow surrogate code points
   1233    (``U+D800``--``U+DFFF``) to be encoded.
   1234    The utf-32\* decoders no longer decode
   1235    byte sequences that correspond to surrogate code points.
   1236 
   1237 
   1238 Python Specific Encodings
   1239 -------------------------
   1240 
   1241 A number of predefined codecs are specific to Python, so their codec names have
   1242 no meaning outside Python.  These are listed in the tables below based on the
   1243 expected input and output types (note that while text encodings are the most
   1244 common use case for codecs, the underlying codec infrastructure supports
   1245 arbitrary data transforms rather than just text encodings).  For asymmetric
   1246 codecs, the stated purpose describes the encoding direction.
   1247 
   1248 Text Encodings
   1249 ^^^^^^^^^^^^^^
   1250 
   1251 The following codecs provide :class:`str` to :class:`bytes` encoding and
   1252 :term:`bytes-like object` to :class:`str` decoding, similar to the Unicode text
   1253 encodings.
   1254 
   1255 .. tabularcolumns:: |l|p{0.3\linewidth}|p{0.3\linewidth}|
   1256 
   1257 +--------------------+---------+---------------------------+
   1258 | Codec              | Aliases | Purpose                   |
   1259 +====================+=========+===========================+
   1260 | idna               |         | Implements :rfc:`3490`,   |
   1261 |                    |         | see also                  |
   1262 |                    |         | :mod:`encodings.idna`.    |
   1263 |                    |         | Only ``errors='strict'``  |
   1264 |                    |         | is supported.             |
   1265 +--------------------+---------+---------------------------+
   1266 | mbcs               | ansi,   | Windows only: Encode      |
   1267 |                    | dbcs    | operand according to the  |
   1268 |                    |         | ANSI codepage (CP_ACP)    |
   1269 +--------------------+---------+---------------------------+
   1270 | oem                |         | Windows only: Encode      |
   1271 |                    |         | operand according to the  |
   1272 |                    |         | OEM codepage (CP_OEMCP)   |
   1273 |                    |         |                           |
   1274 |                    |         | .. versionadded:: 3.6     |
   1275 +--------------------+---------+---------------------------+
   1276 | palmos             |         | Encoding of PalmOS 3.5    |
   1277 +--------------------+---------+---------------------------+
   1278 | punycode           |         | Implements :rfc:`3492`.   |
   1279 |                    |         | Stateful codecs are not   |
   1280 |                    |         | supported.                |
   1281 +--------------------+---------+---------------------------+
   1282 | raw_unicode_escape |         | Latin-1 encoding with     |
   1283 |                    |         | ``\uXXXX`` and            |
   1284 |                    |         | ``\UXXXXXXXX`` for other  |
   1285 |                    |         | code points. Existing     |
   1286 |                    |         | backslashes are not       |
   1287 |                    |         | escaped in any way.       |
   1288 |                    |         | It is used in the Python  |
   1289 |                    |         | pickle protocol.          |
   1290 +--------------------+---------+---------------------------+
   1291 | undefined          |         | Raise an exception for    |
   1292 |                    |         | all conversions, even     |
   1293 |                    |         | empty strings. The error  |
   1294 |                    |         | handler is ignored.       |
   1295 +--------------------+---------+---------------------------+
   1296 | unicode_escape     |         | Encoding suitable as the  |
   1297 |                    |         | contents of a Unicode     |
   1298 |                    |         | literal in ASCII-encoded  |
   1299 |                    |         | Python source code,       |
   1300 |                    |         | except that quotes are    |
   1301 |                    |         | not escaped. Decodes from |
   1302 |                    |         | Latin-1 source code.      |
   1303 |                    |         | Beware that Python source |
   1304 |                    |         | code actually uses UTF-8  |
   1305 |                    |         | by default.               |
   1306 +--------------------+---------+---------------------------+
   1307 | unicode_internal   |         | Return the internal       |
   1308 |                    |         | representation of the     |
   1309 |                    |         | operand. Stateful codecs  |
   1310 |                    |         | are not supported.        |
   1311 |                    |         |                           |
   1312 |                    |         | .. deprecated:: 3.3       |
   1313 |                    |         |    This representation is |
   1314 |                    |         |    obsoleted by           |
   1315 |                    |         |    :pep:`393`.            |
   1316 +--------------------+---------+---------------------------+
   1317 
   1318 .. _binary-transforms:
   1319 
   1320 Binary Transforms
   1321 ^^^^^^^^^^^^^^^^^
   1322 
   1323 The following codecs provide binary transforms: :term:`bytes-like object`
   1324 to :class:`bytes` mappings.  They are not supported by :meth:`bytes.decode`
   1325 (which only produces :class:`str` output).
   1326 
   1327 
   1328 .. tabularcolumns:: |l|L|L|L|
   1329 
   1330 +----------------------+------------------+------------------------------+------------------------------+
   1331 | Codec                | Aliases          | Purpose                      | Encoder / decoder            |
   1332 +======================+==================+==============================+==============================+
   1333 | base64_codec [#b64]_ | base64, base_64  | Convert operand to multiline | :meth:`base64.encodebytes` / |
   1334 |                      |                  | MIME base64 (the result      | :meth:`base64.decodebytes`   |
   1335 |                      |                  | always includes a trailing   |                              |
   1336 |                      |                  | ``'\n'``)                    |                              |
   1337 |                      |                  |                              |                              |
   1338 |                      |                  | .. versionchanged:: 3.4      |                              |
   1339 |                      |                  |    accepts any               |                              |
   1340 |                      |                  |    :term:`bytes-like object` |                              |
   1341 |                      |                  |    as input for encoding and |                              |
   1342 |                      |                  |    decoding                  |                              |
   1343 +----------------------+------------------+------------------------------+------------------------------+
   1344 | bz2_codec            | bz2              | Compress the operand         | :meth:`bz2.compress` /       |
   1345 |                      |                  | using bz2                    | :meth:`bz2.decompress`       |
   1346 +----------------------+------------------+------------------------------+------------------------------+
   1347 | hex_codec            | hex              | Convert operand to           | :meth:`binascii.b2a_hex` /   |
   1348 |                      |                  | hexadecimal                  | :meth:`binascii.a2b_hex`     |
   1349 |                      |                  | representation, with two     |                              |
   1350 |                      |                  | digits per byte              |                              |
   1351 +----------------------+------------------+------------------------------+------------------------------+
   1352 | quopri_codec         | quopri,          | Convert operand to MIME      | :meth:`quopri.encode` with   |
   1353 |                      | quotedprintable, | quoted printable             | ``quotetabs=True`` /         |
   1354 |                      | quoted_printable |                              | :meth:`quopri.decode`        |
   1355 +----------------------+------------------+------------------------------+------------------------------+
   1356 | uu_codec             | uu               | Convert the operand using    | :meth:`uu.encode` /          |
   1357 |                      |                  | uuencode                     | :meth:`uu.decode`            |
   1358 +----------------------+------------------+------------------------------+------------------------------+
   1359 | zlib_codec           | zip, zlib        | Compress the operand         | :meth:`zlib.compress` /      |
   1360 |                      |                  | using gzip                   | :meth:`zlib.decompress`      |
   1361 +----------------------+------------------+------------------------------+------------------------------+
   1362 
   1363 .. [#b64] In addition to :term:`bytes-like objects <bytes-like object>`,
   1364    ``'base64_codec'`` also accepts ASCII-only instances of :class:`str` for
   1365    decoding
   1366 
   1367 .. versionadded:: 3.2
   1368    Restoration of the binary transforms.
   1369 
   1370 .. versionchanged:: 3.4
   1371    Restoration of the aliases for the binary transforms.
   1372 
   1373 
   1374 .. _text-transforms:
   1375 
   1376 Text Transforms
   1377 ^^^^^^^^^^^^^^^
   1378 
   1379 The following codec provides a text transform: a :class:`str` to :class:`str`
   1380 mapping.  It is not supported by :meth:`str.encode` (which only produces
   1381 :class:`bytes` output).
   1382 
   1383 .. tabularcolumns:: |l|l|L|
   1384 
   1385 +--------------------+---------+---------------------------+
   1386 | Codec              | Aliases | Purpose                   |
   1387 +====================+=========+===========================+
   1388 | rot_13             | rot13   | Returns the Caesar-cypher |
   1389 |                    |         | encryption of the operand |
   1390 +--------------------+---------+---------------------------+
   1391 
   1392 .. versionadded:: 3.2
   1393    Restoration of the ``rot_13`` text transform.
   1394 
   1395 .. versionchanged:: 3.4
   1396    Restoration of the ``rot13`` alias.
   1397 
   1398 
   1399 :mod:`encodings.idna` --- Internationalized Domain Names in Applications
   1400 ------------------------------------------------------------------------
   1401 
   1402 .. module:: encodings.idna
   1403    :synopsis: Internationalized Domain Names implementation
   1404 .. moduleauthor:: Martin v. Lwis
   1405 
   1406 This module implements :rfc:`3490` (Internationalized Domain Names in
   1407 Applications) and :rfc:`3492` (Nameprep: A Stringprep Profile for
   1408 Internationalized Domain Names (IDN)). It builds upon the ``punycode`` encoding
   1409 and :mod:`stringprep`.
   1410 
   1411 These RFCs together define a protocol to support non-ASCII characters in domain
   1412 names. A domain name containing non-ASCII characters (such as
   1413 ``www.Alliancefranaise.nu``) is converted into an ASCII-compatible encoding
   1414 (ACE, such as ``www.xn--alliancefranaise-npb.nu``). The ACE form of the domain
   1415 name is then used in all places where arbitrary characters are not allowed by
   1416 the protocol, such as DNS queries, HTTP :mailheader:`Host` fields, and so
   1417 on. This conversion is carried out in the application; if possible invisible to
   1418 the user: The application should transparently convert Unicode domain labels to
   1419 IDNA on the wire, and convert back ACE labels to Unicode before presenting them
   1420 to the user.
   1421 
   1422 Python supports this conversion in several ways:  the ``idna`` codec performs
   1423 conversion between Unicode and ACE, separating an input string into labels
   1424 based on the separator characters defined in `section 3.1`_ (1) of :rfc:`3490`
   1425 and converting each label to ACE as required, and conversely separating an input
   1426 byte string into labels based on the ``.`` separator and converting any ACE
   1427 labels found into unicode.  Furthermore, the :mod:`socket` module
   1428 transparently converts Unicode host names to ACE, so that applications need not
   1429 be concerned about converting host names themselves when they pass them to the
   1430 socket module. On top of that, modules that have host names as function
   1431 parameters, such as :mod:`http.client` and :mod:`ftplib`, accept Unicode host
   1432 names (:mod:`http.client` then also transparently sends an IDNA hostname in the
   1433 :mailheader:`Host` field if it sends that field at all).
   1434 
   1435 .. _section 3.1: https://tools.ietf.org/html/rfc3490#section-3.1
   1436 
   1437 When receiving host names from the wire (such as in reverse name lookup), no
   1438 automatic conversion to Unicode is performed: Applications wishing to present
   1439 such host names to the user should decode them to Unicode.
   1440 
   1441 The module :mod:`encodings.idna` also implements the nameprep procedure, which
   1442 performs certain normalizations on host names, to achieve case-insensitivity of
   1443 international domain names, and to unify similar characters. The nameprep
   1444 functions can be used directly if desired.
   1445 
   1446 
   1447 .. function:: nameprep(label)
   1448 
   1449    Return the nameprepped version of *label*. The implementation currently assumes
   1450    query strings, so ``AllowUnassigned`` is true.
   1451 
   1452 
   1453 .. function:: ToASCII(label)
   1454 
   1455    Convert a label to ASCII, as specified in :rfc:`3490`. ``UseSTD3ASCIIRules`` is
   1456    assumed to be false.
   1457 
   1458 
   1459 .. function:: ToUnicode(label)
   1460 
   1461    Convert a label to Unicode, as specified in :rfc:`3490`.
   1462 
   1463 
   1464 :mod:`encodings.mbcs` --- Windows ANSI codepage
   1465 -----------------------------------------------
   1466 
   1467 .. module:: encodings.mbcs
   1468    :synopsis: Windows ANSI codepage
   1469 
   1470 Encode operand according to the ANSI codepage (CP_ACP).
   1471 
   1472 Availability: Windows only.
   1473 
   1474 .. versionchanged:: 3.3
   1475    Support any error handler.
   1476 
   1477 .. versionchanged:: 3.2
   1478    Before 3.2, the *errors* argument was ignored; ``'replace'`` was always used
   1479    to encode, and ``'ignore'`` to decode.
   1480 
   1481 
   1482 :mod:`encodings.utf_8_sig` --- UTF-8 codec with BOM signature
   1483 -------------------------------------------------------------
   1484 
   1485 .. module:: encodings.utf_8_sig
   1486    :synopsis: UTF-8 codec with BOM signature
   1487 .. moduleauthor:: Walter Drwald
   1488 
   1489 This module implements a variant of the UTF-8 codec: On encoding a UTF-8 encoded
   1490 BOM will be prepended to the UTF-8 encoded bytes. For the stateful encoder this
   1491 is only done once (on the first write to the byte stream).  For decoding an
   1492 optional UTF-8 encoded BOM at the start of the data will be skipped.
   1493