| :mod:`!codecs` --- Codec registry and base classes | |
| ================================================== | |
| .. module:: codecs | |
| :synopsis: Encode and decode data and streams. | |
| **Source code:** :source:`Lib/codecs.py` | |
| .. index:: | |
| single: Unicode | |
| single: Codecs | |
| pair: Codecs; encode | |
| pair: Codecs; decode | |
| single: streams | |
| pair: stackable; streams | |
| -------------- | |
| This module defines base classes for standard Python codecs (encoders and | |
| decoders) and provides access to the internal Python codec registry, which | |
| manages the codec and error handling lookup process. Most standard codecs | |
| are :term:`text encodings <text encoding>`, which encode text to bytes (and | |
| decode bytes to text), but there are also codecs provided that encode text to | |
| text, and bytes to bytes. Custom codecs may encode and decode between arbitrary | |
| types, but some module features are restricted to be used specifically with | |
| :term:`text encodings <text encoding>` or with codecs that encode to | |
| :class:`bytes`. | |
| The module defines the following functions for encoding and decoding with | |
| any codec: | |
| .. function:: encode(obj, encoding='utf-8', errors='strict') | |
| Encodes *obj* using the codec registered for *encoding*. | |
| *Errors* may be given to set the desired error handling scheme. The | |
| default error handler is ``'strict'`` meaning that encoding errors raise | |
| :exc:`ValueError` (or a more codec specific subclass, such as | |
| :exc:`UnicodeEncodeError`). Refer to :ref:`codec-base-classes` for more | |
| information on codec error handling. | |
| .. function:: decode(obj, encoding='utf-8', errors='strict') | |
| Decodes *obj* using the codec registered for *encoding*. | |
| *Errors* may be given to set the desired error handling scheme. The | |
| default error handler is ``'strict'`` meaning that decoding errors raise | |
| :exc:`ValueError` (or a more codec specific subclass, such as | |
| :exc:`UnicodeDecodeError`). Refer to :ref:`codec-base-classes` for more | |
| information on codec error handling. | |
| .. function:: charmap_build(string) | |
| Return a mapping suitable for encoding with a custom single-byte encoding. | |
| Given a :class:`str` *string* of up to 256 characters representing a | |
| decoding table, returns either a compact internal mapping object | |
| ``EncodingMap`` or a :class:`dictionary <dict>` mapping character ordinals | |
| to byte values. Raises a :exc:`TypeError` on invalid input. | |
| The full details for each codec can also be looked up directly: | |
| .. function:: lookup(encoding, /) | |
| Looks up the codec info in the Python codec registry and returns a | |
| :class:`CodecInfo` object as defined below. | |
| This function first normalizes the *encoding*: all ASCII letters are | |
| converted to lower case, spaces are replaced with hyphens. | |
| Then encoding is looked up in the registry's cache. If not found, the list of | |
| registered search functions is scanned. If no :class:`CodecInfo` object is | |
| found, a :exc:`LookupError` is raised. Otherwise, the :class:`CodecInfo` object | |
| is stored in the cache and returned to the caller. | |
| .. versionchanged:: 3.9 | |
| Any characters except ASCII letters and digits and a dot are converted to underscore. | |
| .. versionchanged:: 3.15 | |
| No characters are converted to underscore anymore. | |
| Spaces are converted to hyphens. | |
| .. class:: CodecInfo(encode, decode, streamreader=None, streamwriter=None, incrementalencoder=None, incrementaldecoder=None, name=None) | |
| Codec details when looking up the codec registry. The constructor | |
| arguments are stored in attributes of the same name: | |
| .. attribute:: name | |
| The name of the encoding. | |
| .. attribute:: encode | |
| decode | |
| The stateless encoding and decoding functions. These must be | |
| functions or methods which have the same interface as | |
| the :meth:`~Codec.encode` and :meth:`~Codec.decode` methods of Codec | |
| instances (see :ref:`Codec Interface <codec-objects>`). | |
| The functions or methods are expected to work in a stateless mode. | |
| .. attribute:: incrementalencoder | |
| incrementaldecoder | |
| Incremental encoder and decoder classes or factory functions. | |
| These have to provide the interface defined by the base classes | |
| :class:`IncrementalEncoder` and :class:`IncrementalDecoder`, | |
| respectively. Incremental codecs can maintain state. | |
| .. attribute:: streamwriter | |
| streamreader | |
| Stream writer and reader classes or factory functions. These have to | |
| provide the interface defined by the base classes | |
| :class:`StreamWriter` and :class:`StreamReader`, respectively. | |
| Stream codecs can maintain state. | |
| To simplify access to the various codec components, the module provides | |
| these additional functions which use :func:`lookup` for the codec lookup: | |
| .. function:: getencoder(encoding) | |
| Look up the codec for the given encoding and return its encoder function. | |
| Raises a :exc:`LookupError` in case the encoding cannot be found. | |
| .. function:: getdecoder(encoding) | |
| Look up the codec for the given encoding and return its decoder function. | |
| Raises a :exc:`LookupError` in case the encoding cannot be found. | |
| .. function:: getincrementalencoder(encoding) | |
| Look up the codec for the given encoding and return its incremental encoder | |
| class or factory function. | |
| Raises a :exc:`LookupError` in case the encoding cannot be found or the codec | |
| doesn't support an incremental encoder. | |
| .. function:: getincrementaldecoder(encoding) | |
| Look up the codec for the given encoding and return its incremental decoder | |
| class or factory function. | |
| Raises a :exc:`LookupError` in case the encoding cannot be found or the codec | |
| doesn't support an incremental decoder. | |
| .. function:: getreader(encoding) | |
| Look up the codec for the given encoding and return its :class:`StreamReader` | |
| class or factory function. | |
| Raises a :exc:`LookupError` in case the encoding cannot be found. | |
| .. function:: getwriter(encoding) | |
| Look up the codec for the given encoding and return its :class:`StreamWriter` | |
| class or factory function. | |
| Raises a :exc:`LookupError` in case the encoding cannot be found. | |
| Custom codecs are made available by registering a suitable codec search | |
| function: | |
| .. function:: register(search_function, /) | |
| Register a codec search function. Search functions are expected to take one | |
| argument, being the encoding name in all lower case letters with spaces | |
| converted to hyphens, and return a :class:`CodecInfo` object. | |
| In case a search function cannot find a given encoding, it should return | |
| ``None``. | |
| .. function:: unregister(search_function, /) | |
| Unregister a codec search function and clear the registry's cache. | |
| If the search function is not registered, do nothing. | |
| .. versionadded:: 3.10 | |
| While the builtin :func:`open` and the associated :mod:`io` module are the | |
| recommended approach for working with encoded text files, this module | |
| provides additional utility functions and classes that allow the use of a | |
| wider range of codecs when working with binary files: | |
| .. function:: open(filename, mode='r', encoding=None, errors='strict', buffering=-1) | |
| Open an encoded file using the given *mode* and return an instance of | |
| :class:`StreamReaderWriter`, providing transparent encoding/decoding. | |
| The default file mode is ``'r'``, meaning to open the file in read mode. | |
| .. note:: | |
| If *encoding* is not ``None``, then the | |
| underlying encoded files are always opened in binary mode. | |
| No automatic conversion of ``'\n'`` is done on reading and writing. | |
| The *mode* argument may be any binary mode acceptable to the built-in | |
| :func:`open` function; the ``'b'`` is automatically added. | |
| *encoding* specifies the encoding which is to be used for the file. | |
| Any encoding that encodes to and decodes from bytes is allowed, and | |
| the data types supported by the file methods depend on the codec used. | |
| *errors* may be given to define the error handling. It defaults to ``'strict'`` | |
| which causes a :exc:`ValueError` to be raised in case an encoding error occurs. | |
| *buffering* has the same meaning as for the built-in :func:`open` function. | |
| It defaults to -1 which means that the default buffer size will be used. | |
| .. versionchanged:: 3.11 | |
| The ``'U'`` mode has been removed. | |
| .. deprecated:: 3.14 | |
| :func:`codecs.open` has been superseded by :func:`open`. | |
| .. function:: EncodedFile(file, data_encoding, file_encoding=None, errors='strict') | |
| Return a :class:`StreamRecoder` instance, a wrapped version of *file* | |
| which provides transparent transcoding. The original file is closed | |
| when the wrapped version is closed. | |
| Data written to the wrapped file is decoded according to the given | |
| *data_encoding* and then written to the original file as bytes using | |
| *file_encoding*. Bytes read from the original file are decoded | |
| according to *file_encoding*, and the result is encoded | |
| using *data_encoding*. | |
| If *file_encoding* is not given, it defaults to *data_encoding*. | |
| *errors* may be given to define the error handling. It defaults to | |
| ``'strict'``, which causes :exc:`ValueError` to be raised in case an encoding | |
| error occurs. | |
| .. function:: iterencode(iterator, encoding, errors='strict', **kwargs) | |
| Uses an incremental encoder to iteratively encode the input provided by | |
| *iterator*. *iterator* must yield :class:`str` objects. | |
| This function is a :term:`generator`. The *errors* argument (as well as any | |
| other keyword argument) is passed through to the incremental encoder. | |
| This function requires that the codec accept text :class:`str` objects | |
| to encode. Therefore it does not support bytes-to-bytes encoders such as | |
| ``base64_codec``. | |
| .. function:: iterdecode(iterator, encoding, errors='strict', **kwargs) | |
| Uses an incremental decoder to iteratively decode the input provided by | |
| *iterator*. *iterator* must yield :class:`bytes` objects. | |
| This function is a :term:`generator`. The *errors* argument (as well as any | |
| other keyword argument) is passed through to the incremental decoder. | |
| This function requires that the codec accept :class:`bytes` objects | |
| to decode. Therefore it does not support text-to-text encoders such as | |
| ``rot_13``, although ``rot_13`` may be used equivalently with | |
| :func:`iterencode`. | |
| .. function:: readbuffer_encode(buffer, errors=None, /) | |
| Return a :class:`tuple` containing the raw bytes of *buffer*, a | |
| :ref:`buffer-compatible object <bufferobjects>` or :class:`str` | |
| (encoded to UTF-8 before processing), and their length in bytes. | |
| The *errors* argument is ignored. | |
| .. code-block:: pycon | |
| >>> codecs.readbuffer_encode(b"Zito") | |
| (b'Zito', 4) | |
| The module also provides the following constants which are useful for reading | |
| and writing to platform dependent files: | |
| .. data:: BOM | |
| BOM_BE | |
| BOM_LE | |
| BOM_UTF8 | |
| BOM_UTF16 | |
| BOM_UTF16_BE | |
| BOM_UTF16_LE | |
| BOM_UTF32 | |
| BOM_UTF32_BE | |
| BOM_UTF32_LE | |
| These constants define various byte sequences, | |
| being Unicode byte order marks (BOMs) for several encodings. They are | |
| used in UTF-16 and UTF-32 data streams to indicate the byte order used, | |
| and in UTF-8 as a Unicode signature. :const:`BOM_UTF16` is either | |
| :const:`BOM_UTF16_BE` or :const:`BOM_UTF16_LE` depending on the platform's | |
| native byte order, :const:`BOM` is an alias for :const:`BOM_UTF16`, | |
| :const:`BOM_LE` for :const:`BOM_UTF16_LE` and :const:`BOM_BE` for | |
| :const:`BOM_UTF16_BE`. The others represent the BOM in UTF-8 and UTF-32 | |
| encodings. | |
| .. _codec-base-classes: | |
| Codec Base Classes | |
| ------------------ | |
| The :mod:`!codecs` module defines a set of base classes which define the | |
| interfaces for working with codec objects, and can also be used as the basis | |
| for custom codec implementations. | |
| Each codec has to define four interfaces to make it usable as codec in Python: | |
| stateless encoder, stateless decoder, stream reader and stream writer. The | |
| stream reader and writers typically reuse the stateless encoder/decoder to | |
| implement the file protocols. Codec authors also need to define how the | |
| codec will handle encoding and decoding errors. | |
| .. _surrogateescape: | |
| .. _error-handlers: | |
| Error Handlers | |
| ^^^^^^^^^^^^^^ | |
| To simplify and standardize error handling, codecs may implement different | |
| error handling schemes by accepting the *errors* string argument: | |
| >>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace') | |
| b'German \\xdf, \\u266c' | |
| >>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace') | |
| b'German ß, ♬' | |
| .. index:: | |
| pair: strict; error handler's name | |
| pair: ignore; error handler's name | |
| pair: replace; error handler's name | |
| pair: backslashreplace; error handler's name | |
| pair: surrogateescape; error handler's name | |
| single: ? (question mark); replacement character | |
| single: \ (backslash); escape sequence | |
| single: \x; escape sequence | |
| single: \u; escape sequence | |
| single: \U; escape sequence | |
| The following error handlers can be used with all Python | |
| :ref:`standard-encodings` codecs: | |
| .. tabularcolumns:: |l|L| | |
| +-------------------------+-----------------------------------------------+ | |
| | Value | Meaning | | |
| +=========================+===============================================+ | |
| | ``'strict'`` | Raise :exc:`UnicodeError` (or a subclass), | | |
| | | this is the default. Implemented in | | |
| | | :func:`strict_errors`. | | |
| +-------------------------+-----------------------------------------------+ | |
| | ``'ignore'`` | Ignore the malformed data and continue without| | |
| | | further notice. Implemented in | | |
| | | :func:`ignore_errors`. | | |
| +-------------------------+-----------------------------------------------+ | |
| | ``'replace'`` | Replace with a replacement marker. On | | |
| | | encoding, use ``?`` (ASCII character). On | | |
| | | decoding, use ``�`` (U+FFFD, the official | | |
| | | REPLACEMENT CHARACTER). Implemented in | | |
| | | :func:`replace_errors`. | | |
| +-------------------------+-----------------------------------------------+ | |
| | ``'backslashreplace'`` | Replace with backslashed escape sequences. | | |
| | | On encoding, use hexadecimal form of Unicode | | |
| | | code point with formats :samp:`\\x{hh}` | | |
| | | :samp:`\\u{xxxx}` :samp:`\\U{xxxxxxxx}`. | | |
| | | On decoding, use hexadecimal form of byte | | |
| | | value with format :samp:`\\x{hh}`. | | |
| | | Implemented in | | |
| | | :func:`backslashreplace_errors`. | | |
| +-------------------------+-----------------------------------------------+ | |
| | ``'surrogateescape'`` | On decoding, replace byte with individual | | |
| | | surrogate code ranging from ``U+DC80`` to | | |
| | | ``U+DCFF``. This code will then be turned | | |
| | | back into the same byte when the | | |
| | | ``'surrogateescape'`` error handler is used | | |
| | | when encoding the data. (See :pep:`383` for | | |
| | | more.) | | |
| +-------------------------+-----------------------------------------------+ | |
| .. index:: | |
| pair: xmlcharrefreplace; error handler's name | |
| pair: namereplace; error handler's name | |
| single: \N; escape sequence | |
| The following error handlers are only applicable to encoding (within | |
| :term:`text encodings <text encoding>`): | |
| +-------------------------+-----------------------------------------------+ | |
| | Value | Meaning | | |
| +=========================+===============================================+ | |
| | ``'xmlcharrefreplace'`` | Replace with XML/HTML numeric character | | |
| | | reference, which is a decimal form of Unicode | | |
| | | code point with format :samp:`&#{num};`. | | |
| | | Implemented in | | |
| | | :func:`xmlcharrefreplace_errors`. | | |
| +-------------------------+-----------------------------------------------+ | |
| | ``'namereplace'`` | Replace with ``\N{...}`` escape sequences, | | |
| | | what appears in the braces is the Name | | |
| | | property from Unicode Character Database. | | |
| | | Implemented in :func:`namereplace_errors`. | | |
| +-------------------------+-----------------------------------------------+ | |
| .. index:: | |
| pair: surrogatepass; error handler's name | |
| In addition, the following error handler is specific to the given codecs: | |
| +-------------------+------------------------+-------------------------------------------+ | |
| | Value | Codecs | Meaning | | |
| +===================+========================+===========================================+ | |
| |``'surrogatepass'``| utf-8, utf-16, utf-32, | Allow encoding and decoding surrogate code| | |
| | | utf-16-be, utf-16-le, | point (``U+D800`` - ``U+DFFF``) as normal | | |
| | | utf-32-be, utf-32-le | code point. Otherwise these codecs treat | | |
| | | | the presence of surrogate code point in | | |
| | | | :class:`str` as an error. | | |
| +-------------------+------------------------+-------------------------------------------+ | |
| .. versionadded:: 3.1 | |
| The ``'surrogateescape'`` and ``'surrogatepass'`` error handlers. | |
| .. versionchanged:: 3.4 | |
| The ``'surrogatepass'`` error handler now works with utf-16\* and utf-32\* | |
| codecs. | |
| .. versionadded:: 3.5 | |
| The ``'namereplace'`` error handler. | |
| .. versionchanged:: 3.5 | |
| The ``'backslashreplace'`` error handler now works with decoding and | |
| translating. | |
| The set of allowed values can be extended by registering a new named error | |
| handler: | |
| .. function:: register_error(name, error_handler, /) | |
| Register the error handling function *error_handler* under the name *name*. | |
| The *error_handler* argument will be called during encoding and decoding | |
| in case of an error, when *name* is specified as the errors parameter. | |
| For encoding, *error_handler* will be called with a :exc:`UnicodeEncodeError` | |
| instance, which contains information about the location of the error. The | |
| error handler must either raise this or a different exception, or return a | |
| tuple with a replacement for the unencodable part of the input and a position | |
| where encoding should continue. The replacement may be either :class:`str` or | |
| :class:`bytes`. If the replacement is bytes, the encoder will simply copy | |
| them into the output buffer. If the replacement is a string, the encoder will | |
| encode the replacement. Encoding continues on original input at the | |
| specified position. Negative position values will be treated as being | |
| relative to the end of the input string. If the resulting position is out of | |
| bound an :exc:`IndexError` will be raised. | |
| Decoding and translating works similarly, except :exc:`UnicodeDecodeError` or | |
| :exc:`UnicodeTranslateError` will be passed to the handler and that the | |
| replacement from the error handler will be put into the output directly. | |
| Previously registered error handlers (including the standard error handlers) | |
| can be looked up by name: | |
| .. function:: lookup_error(name, /) | |
| Return the error handler previously registered under the name *name*. | |
| Raises a :exc:`LookupError` in case the handler cannot be found. | |
| The following standard error handlers are also made available as module level | |
| functions: | |
| .. function:: strict_errors(exception) | |
| Implements the ``'strict'`` error handling. | |
| Each encoding or decoding error raises a :exc:`UnicodeError`. | |
| .. function:: ignore_errors(exception) | |
| Implements the ``'ignore'`` error handling. | |
| Malformed data is ignored; encoding or decoding is continued without | |
| further notice. | |
| .. function:: replace_errors(exception) | |
| Implements the ``'replace'`` error handling. | |
| Substitutes ``?`` (ASCII character) for encoding errors or ``�`` (U+FFFD, | |
| the official REPLACEMENT CHARACTER) for decoding errors. | |
| .. function:: backslashreplace_errors(exception) | |
| Implements the ``'backslashreplace'`` error handling. | |
| Malformed data is replaced by a backslashed escape sequence. | |
| On encoding, use the hexadecimal form of Unicode code point with formats | |
| :samp:`\\x{hh}` :samp:`\\u{xxxx}` :samp:`\\U{xxxxxxxx}`. | |
| On decoding, use the hexadecimal form of | |
| byte value with format :samp:`\\x{hh}`. | |
| .. versionchanged:: 3.5 | |
| Works with decoding and translating. | |
| .. function:: xmlcharrefreplace_errors(exception) | |
| Implements the ``'xmlcharrefreplace'`` error handling (for encoding within | |
| :term:`text encoding` only). | |
| The unencodable character is replaced by an appropriate XML/HTML numeric | |
| character reference, which is a decimal form of Unicode code point with | |
| format :samp:`&#{num};` . | |
| .. function:: namereplace_errors(exception) | |
| Implements the ``'namereplace'`` error handling (for encoding within | |
| :term:`text encoding` only). | |
| The unencodable character is replaced by a ``\N{...}`` escape sequence. The | |
| set of characters that appear in the braces is the Name property from | |
| Unicode Character Database. For example, the German lowercase letter ``'ß'`` | |
| will be converted to byte sequence ``\N{LATIN SMALL LETTER SHARP S}`` . | |
| .. versionadded:: 3.5 | |
| .. _codec-objects: | |
| Stateless Encoding and Decoding | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| The base :class:`Codec` class defines these methods which also define the | |
| function interfaces of the stateless encoder and decoder: | |
| .. class:: Codec | |
| .. method:: encode(input, errors='strict') | |
| Encodes the object *input* and returns a tuple (output object, length consumed). | |
| For instance, :term:`text encoding` converts | |
| a string object to a bytes object using a particular | |
| character set encoding (e.g., ``cp1252`` or ``iso-8859-1``). | |
| The *errors* argument defines the error handling to apply. | |
| It defaults to ``'strict'`` handling. | |
| The method may not store state in the :class:`Codec` instance. Use | |
| :class:`StreamWriter` for codecs which have to keep state in order to make | |
| encoding efficient. | |
| The encoder must be able to handle zero length input and return an empty object | |
| of the output object type in this situation. | |
| .. method:: decode(input, errors='strict') | |
| Decodes the object *input* and returns a tuple (output object, length | |
| consumed). For instance, for a :term:`text encoding`, decoding converts | |
| a bytes object encoded using a particular | |
| character set encoding to a string object. | |
| For text encodings and bytes-to-bytes codecs, | |
| *input* must be a bytes object or one which provides the read-only | |
| buffer interface -- for example, buffer objects and memory mapped files. | |
| The *errors* argument defines the error handling to apply. | |
| It defaults to ``'strict'`` handling. | |
| The method may not store state in the :class:`Codec` instance. Use | |
| :class:`StreamReader` for codecs which have to keep state in order to make | |
| decoding efficient. | |
| The decoder must be able to handle zero length input and return an empty object | |
| of the output object type in this situation. | |
| Incremental Encoding and Decoding | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| The :class:`IncrementalEncoder` and :class:`IncrementalDecoder` classes provide | |
| the basic interface for incremental encoding and decoding. Encoding/decoding the | |
| input isn't done with one call to the stateless encoder/decoder function, but | |
| with multiple calls to the | |
| :meth:`~IncrementalEncoder.encode`/:meth:`~IncrementalDecoder.decode` method of | |
| the incremental encoder/decoder. The incremental encoder/decoder keeps track of | |
| the encoding/decoding process during method calls. | |
| The joined output of calls to the | |
| :meth:`~IncrementalEncoder.encode`/:meth:`~IncrementalDecoder.decode` method is | |
| the same as if all the single inputs were joined into one, and this input was | |
| encoded/decoded with the stateless encoder/decoder. | |
| .. _incremental-encoder-objects: | |
| IncrementalEncoder Objects | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| The :class:`IncrementalEncoder` class is used for encoding an input in multiple | |
| steps. It defines the following methods which every incremental encoder must | |
| define in order to be compatible with the Python codec registry. | |
| .. class:: IncrementalEncoder(errors='strict') | |
| Constructor for an :class:`IncrementalEncoder` instance. | |
| All incremental encoders must provide this constructor interface. They are free | |
| to add additional keyword arguments, but only the ones defined here are used by | |
| the Python codec registry. | |
| The :class:`IncrementalEncoder` may implement different error handling schemes | |
| by providing the *errors* keyword argument. See :ref:`error-handlers` for | |
| possible values. | |
| The *errors* argument will be assigned to an attribute of the same name. | |
| Assigning to this attribute makes it possible to switch between different error | |
| handling strategies during the lifetime of the :class:`IncrementalEncoder` | |
| object. | |
| .. method:: encode(object, final=False) | |
| Encodes *object* (taking the current state of the encoder into account) | |
| and returns the resulting encoded object. If this is the last call to | |
| :meth:`encode` *final* must be true (the default is false). | |
| .. method:: reset() | |
| Reset the encoder to the initial state. The output is discarded: call | |
| ``.encode(object, final=True)``, passing an empty byte or text string | |
| if necessary, to reset the encoder and to get the output. | |
| .. method:: getstate() | |
| Return the current state of the encoder which must be an integer. The | |
| implementation should make sure that ``0`` is the most common | |
| state. (States that are more complicated than integers can be converted | |
| into an integer by marshaling/pickling the state and encoding the bytes | |
| of the resulting string into an integer.) | |
| .. method:: setstate(state) | |
| Set the state of the encoder to *state*. *state* must be an encoder state | |
| returned by :meth:`getstate`. | |
| .. _incremental-decoder-objects: | |
| IncrementalDecoder Objects | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| The :class:`IncrementalDecoder` class is used for decoding an input in multiple | |
| steps. It defines the following methods which every incremental decoder must | |
| define in order to be compatible with the Python codec registry. | |
| .. class:: IncrementalDecoder(errors='strict') | |
| Constructor for an :class:`IncrementalDecoder` instance. | |
| All incremental decoders must provide this constructor interface. They are free | |
| to add additional keyword arguments, but only the ones defined here are used by | |
| the Python codec registry. | |
| The :class:`IncrementalDecoder` may implement different error handling schemes | |
| by providing the *errors* keyword argument. See :ref:`error-handlers` for | |
| possible values. | |
| The *errors* argument will be assigned to an attribute of the same name. | |
| Assigning to this attribute makes it possible to switch between different error | |
| handling strategies during the lifetime of the :class:`IncrementalDecoder` | |
| object. | |
| .. method:: decode(object, final=False) | |
| Decodes *object* (taking the current state of the decoder into account) | |
| and returns the resulting decoded object. If this is the last call to | |
| :meth:`decode` *final* must be true (the default is false). If *final* is | |
| true the decoder must decode the input completely and must flush all | |
| buffers. If this isn't possible (e.g. because of incomplete byte sequences | |
| at the end of the input) it must initiate error handling just like in the | |
| stateless case (which might raise an exception). | |
| .. method:: reset() | |
| Reset the decoder to the initial state. | |
| .. method:: getstate() | |
| Return the current state of the decoder. This must be a tuple with two | |
| items, the first must be the buffer containing the still undecoded | |
| input. The second must be an integer and can be additional state | |
| info. (The implementation should make sure that ``0`` is the most common | |
| additional state info.) If this additional state info is ``0`` it must be | |
| possible to set the decoder to the state which has no input buffered and | |
| ``0`` as the additional state info, so that feeding the previously | |
| buffered input to the decoder returns it to the previous state without | |
| producing any output. (Additional state info that is more complicated than | |
| integers can be converted into an integer by marshaling/pickling the info | |
| and encoding the bytes of the resulting string into an integer.) | |
| .. method:: setstate(state) | |
| Set the state of the decoder to *state*. *state* must be a decoder state | |
| returned by :meth:`getstate`. | |
| Stream Encoding and Decoding | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| The :class:`StreamWriter` and :class:`StreamReader` classes provide generic | |
| working interfaces which can be used to implement new encoding submodules very | |
| easily. See :mod:`!encodings.utf_8` for an example of how this is done. | |
| .. _stream-writer-objects: | |
| StreamWriter Objects | |
| ~~~~~~~~~~~~~~~~~~~~ | |
| The :class:`StreamWriter` class is a subclass of :class:`Codec` and defines the | |
| following methods which every stream writer must define in order to be | |
| compatible with the Python codec registry. | |
| .. class:: StreamWriter(stream, errors='strict') | |
| Constructor for a :class:`StreamWriter` instance. | |
| All stream writers must provide this constructor interface. They are free to add | |
| additional keyword arguments, but only the ones defined here are used by the | |
| Python codec registry. | |
| The *stream* argument must be a file-like object open for writing | |
| text or binary data, as appropriate for the specific codec. | |
| The :class:`StreamWriter` may implement different error handling schemes by | |
| providing the *errors* keyword argument. See :ref:`error-handlers` for | |
| the standard error handlers the underlying stream codec may support. | |
| The *errors* argument will be assigned to an attribute of the same name. | |
| Assigning to this attribute makes it possible to switch between different error | |
| handling strategies during the lifetime of the :class:`StreamWriter` object. | |
| .. method:: write(object) | |
| Writes the object's contents encoded to the stream. | |
| .. method:: writelines(list) | |
| Writes the concatenated iterable of strings to the stream (possibly by reusing | |
| the :meth:`write` method). Infinite or | |
| very large iterables are not supported. The standard bytes-to-bytes codecs | |
| do not support this method. | |
| .. method:: reset() | |
| Resets the codec buffers used for keeping internal state. | |
| Calling this method should ensure that the data on the output is put into | |
| a clean state that allows appending of new fresh data without having to | |
| rescan the whole stream to recover state. | |
| In addition to the above methods, the :class:`StreamWriter` must also inherit | |
| all other methods and attributes from the underlying stream. | |
| .. _stream-reader-objects: | |
| StreamReader Objects | |
| ~~~~~~~~~~~~~~~~~~~~ | |
| The :class:`StreamReader` class is a subclass of :class:`Codec` and defines the | |
| following methods which every stream reader must define in order to be | |
| compatible with the Python codec registry. | |
| .. class:: StreamReader(stream, errors='strict') | |
| Constructor for a :class:`StreamReader` instance. | |
| All stream readers must provide this constructor interface. They are free to add | |
| additional keyword arguments, but only the ones defined here are used by the | |
| Python codec registry. | |
| The *stream* argument must be a file-like object open for reading | |
| text or binary data, as appropriate for the specific codec. | |
| The :class:`StreamReader` may implement different error handling schemes by | |
| providing the *errors* keyword argument. See :ref:`error-handlers` for | |
| the standard error handlers the underlying stream codec may support. | |
| The *errors* argument will be assigned to an attribute of the same name. | |
| Assigning to this attribute makes it possible to switch between different error | |
| handling strategies during the lifetime of the :class:`StreamReader` object. | |
| The set of allowed values for the *errors* argument can be extended with | |
| :func:`register_error`. | |
| .. method:: read(size=-1, chars=-1, firstline=False) | |
| Decodes data from the stream and returns the resulting object. | |
| The *chars* argument indicates the number of decoded | |
| code points or bytes to return. The :func:`read` method will | |
| never return more data than requested, but it might return less, | |
| if there is not enough available. | |
| The *size* argument indicates the approximate maximum | |
| number of encoded bytes or code points to read | |
| for decoding. The decoder can modify this setting as | |
| appropriate. The default value -1 indicates to read and decode as much as | |
| possible. This parameter is intended to | |
| prevent having to decode huge files in one step. | |
| The *firstline* flag indicates that | |
| it would be sufficient to only return the first | |
| line, if there are decoding errors on later lines. | |
| The method should use a greedy read strategy meaning that it should read | |
| as much data as is allowed within the definition of the encoding and the | |
| given size, e.g. if optional encoding endings or state markers are | |
| available on the stream, these should be read too. | |
| .. method:: readline(size=None, keepends=True) | |
| Read one line from the input stream and return the decoded data. | |
| *size*, if given, is passed as size argument to the stream's | |
| :meth:`read` method. | |
| If *keepends* is false line-endings will be stripped from the lines | |
| returned. | |
| .. method:: readlines(sizehint=None, keepends=True) | |
| Read all lines available on the input stream and return them as a list of | |
| lines. | |
| Line-endings are implemented using the codec's :meth:`decode` method and | |
| are included in the list entries if *keepends* is true. | |
| *sizehint*, if given, is passed as the *size* argument to the stream's | |
| :meth:`read` method. | |
| .. method:: reset() | |
| Resets the codec buffers used for keeping internal state. | |
| Note that no stream repositioning should take place. This method is | |
| primarily intended to be able to recover from decoding errors. | |
| In addition to the above methods, the :class:`StreamReader` must also inherit | |
| all other methods and attributes from the underlying stream. | |
| .. _stream-reader-writer: | |
| StreamReaderWriter Objects | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| The :class:`StreamReaderWriter` is a convenience class that allows wrapping | |
| streams which work in both read and write modes. | |
| The design is such that one can use the factory functions returned by the | |
| :func:`lookup` function to construct the instance. | |
| .. class:: StreamReaderWriter(stream, Reader, Writer, errors='strict') | |
| Creates a :class:`StreamReaderWriter` instance. *stream* must be a file-like | |
| object. *Reader* and *Writer* must be factory functions or classes providing the | |
| :class:`StreamReader` and :class:`StreamWriter` interface resp. Error handling | |
| is done in the same way as defined for the stream readers and writers. | |
| :class:`StreamReaderWriter` instances define the combined interfaces of | |
| :class:`StreamReader` and :class:`StreamWriter` classes. They inherit all other | |
| methods and attributes from the underlying stream. | |
| .. _stream-recoder-objects: | |
| StreamRecoder Objects | |
| ~~~~~~~~~~~~~~~~~~~~~ | |
| The :class:`StreamRecoder` translates data from one encoding to another, | |
| which is sometimes useful when dealing with different encoding environments. | |
| The design is such that one can use the factory functions returned by the | |
| :func:`lookup` function to construct the instance. | |
| .. class:: StreamRecoder(stream, encode, decode, Reader, Writer, errors='strict') | |
| Creates a :class:`StreamRecoder` instance which implements a two-way conversion: | |
| *encode* and *decode* work on the frontend — the data visible to | |
| code calling :meth:`~StreamReader.read` and :meth:`~StreamWriter.write`, | |
| while *Reader* and *Writer* | |
| work on the backend — the data in *stream*. | |
| You can use these objects to do transparent transcodings, e.g., from Latin-1 | |
| to UTF-8 and back. | |
| The *stream* argument must be a file-like object. | |
| The *encode* and *decode* arguments must | |
| adhere to the :class:`Codec` interface. *Reader* and | |
| *Writer* must be factory functions or classes providing objects of the | |
| :class:`StreamReader` and :class:`StreamWriter` interface respectively. | |
| Error handling is done in the same way as defined for the stream readers and | |
| writers. | |
| :class:`StreamRecoder` instances define the combined interfaces of | |
| :class:`StreamReader` and :class:`StreamWriter` classes. They inherit all other | |
| methods and attributes from the underlying stream. | |
| .. _encodings-overview: | |
| Encodings and Unicode | |
| --------------------- | |
| Strings are stored internally as sequences of code points in | |
| range ``U+0000``--``U+10FFFF``. (See :pep:`393` for | |
| more details about the implementation.) | |
| Once a string object is used outside of CPU and memory, endianness | |
| and how these arrays are stored as bytes become an issue. As with other | |
| codecs, serialising a string into a sequence of bytes is known as *encoding*, | |
| and recreating the string from the sequence of bytes is known as *decoding*. | |
| There are a variety of different text serialisation codecs, which are | |
| collectivity referred to as :term:`text encodings <text encoding>`. | |
| The simplest text encoding (called ``'latin-1'`` or ``'iso-8859-1'``) maps | |
| the code points 0--255 to the bytes ``0x0``--``0xff``, which means that a string | |
| object that contains code points above ``U+00FF`` can't be encoded with this | |
| codec. Doing so will raise a :exc:`UnicodeEncodeError` that looks | |
| like the following (although the details of the error message may differ): | |
| ``UnicodeEncodeError: 'latin-1' codec can't encode character '\u1234' in | |
| position 3: ordinal not in range(256)``. | |
| There's another group of encodings (the so called charmap encodings) that choose | |
| a different subset of all Unicode code points and how these code points are | |
| mapped to the bytes ``0x0``--``0xff``. To see how this is done simply open | |
| e.g. :file:`encodings/cp1252.py` (which is an encoding that is used primarily on | |
| Windows). There's a string constant with 256 characters that shows you which | |
| character is mapped to which byte value. | |
| All of these encodings can only encode 256 of the 1114112 code points | |
| defined in Unicode. A simple and straightforward way that can store each Unicode | |
| code point, is to store each code point as four consecutive bytes. There are two | |
| possibilities: store the bytes in big endian or in little endian order. These | |
| two encodings are called ``UTF-32-BE`` and ``UTF-32-LE`` respectively. Their | |
| disadvantage is that if, for example, you use ``UTF-32-BE`` on a little endian | |
| machine you will always have to swap bytes on encoding and decoding. | |
| Python's ``UTF-16`` and ``UTF-32`` codecs avoid this problem by using the | |
| platform's native byte order when no BOM is present. | |
| Python follows prevailing platform | |
| practice, so native-endian data round-trips without redundant byte swapping, | |
| even though the Unicode Standard defaults to big-endian when the byte order is | |
| unspecified. When these bytes are read by a CPU with a different endianness, | |
| the bytes have to be swapped. To be able to detect the endianness of a | |
| ``UTF-16`` or ``UTF-32`` byte sequence, a BOM ("Byte Order Mark") is used. | |
| This is the Unicode character ``U+FEFF``. This character can be prepended to every | |
| ``UTF-16`` or ``UTF-32`` byte sequence. The byte swapped version of this character | |
| (``0xFFFE``) is an illegal character that may not appear in a Unicode text. | |
| When the first character of a ``UTF-16`` or ``UTF-32`` byte sequence is | |
| ``U+FFFE``, the bytes have to be swapped on decoding. | |
| Unfortunately the character ``U+FEFF`` had a second purpose as | |
| a ``ZERO WIDTH NO-BREAK SPACE``: a character that has no width and doesn't allow | |
| a word to be split. It can e.g. be used to give hints to a ligature algorithm. | |
| With Unicode 4.0 using ``U+FEFF`` as a ``ZERO WIDTH NO-BREAK SPACE`` has been | |
| deprecated (with ``U+2060`` (``WORD JOINER``) assuming this role). Nevertheless | |
| Unicode software still must be able to handle ``U+FEFF`` in both roles: as a BOM | |
| it's a device to determine the storage layout of the encoded bytes, and vanishes | |
| once the byte sequence has been decoded into a string; as a ``ZERO WIDTH | |
| NO-BREAK SPACE`` it's a normal character that will be decoded like any other. | |
| There's another encoding that is able to encode the full range of Unicode | |
| characters: UTF-8. UTF-8 is an 8-bit encoding, which means there are no issues | |
| with byte order in UTF-8. Each byte in a UTF-8 byte sequence consists of two | |
| parts: marker bits (the most significant bits) and payload bits. The marker bits | |
| are a sequence of zero to four ``1`` bits followed by a ``0`` bit. Unicode characters are | |
| encoded like this (with x being payload bits, which when concatenated give the | |
| Unicode character): | |
| +-----------------------------------+----------------------------------------------+ | |
| | Range | Encoding | | |
| +===================================+==============================================+ | |
| | ``U-00000000`` ... ``U-0000007F`` | 0xxxxxxx | | |
| +-----------------------------------+----------------------------------------------+ | |
| | ``U-00000080`` ... ``U-000007FF`` | 110xxxxx 10xxxxxx | | |
| +-----------------------------------+----------------------------------------------+ | |
| | ``U-00000800`` ... ``U-0000FFFF`` | 1110xxxx 10xxxxxx 10xxxxxx | | |
| +-----------------------------------+----------------------------------------------+ | |
| | ``U-00010000`` ... ``U-0010FFFF`` | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | | |
| +-----------------------------------+----------------------------------------------+ | |
| The least significant bit of the Unicode character is the rightmost x bit. | |
| As UTF-8 is an 8-bit encoding no BOM is required and any ``U+FEFF`` character in | |
| the decoded string (even if it's the first character) is treated as a ``ZERO | |
| WIDTH NO-BREAK SPACE``. | |
| Without external information it's impossible to reliably determine which | |
| encoding was used for encoding a string. Each charmap encoding can | |
| decode any random byte sequence. However that's not possible with UTF-8, as | |
| UTF-8 byte sequences have a structure that doesn't allow arbitrary byte | |
| sequences. To increase the reliability with which a UTF-8 encoding can be | |
| detected, Microsoft invented a variant of UTF-8 (that Python calls | |
| ``"utf-8-sig"``) for its Notepad program: Before any of the Unicode characters | |
| is written to the file, a UTF-8 encoded BOM (which looks like this as a byte | |
| sequence: ``0xef``, ``0xbb``, ``0xbf``) is written. As it's rather improbable | |
| that any charmap encoded file starts with these byte values (which would e.g. | |
| map to | |
| | LATIN SMALL LETTER I WITH DIAERESIS | |
| | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
| | INVERTED QUESTION MARK | |
| in iso-8859-1), this increases the probability that a ``utf-8-sig`` encoding can be | |
| correctly guessed from the byte sequence. So here the BOM is not used to be able | |
| to determine the byte order used for generating the byte sequence, but as a | |
| signature that helps in guessing the encoding. On encoding the utf-8-sig codec | |
| will write ``0xef``, ``0xbb``, ``0xbf`` as the first three bytes to the file. On | |
| decoding ``utf-8-sig`` will skip those three bytes if they appear as the first | |
| three bytes in the file. In UTF-8, the use of the BOM is discouraged and | |
| should generally be avoided. | |
| .. _standard-encodings: | |
| Standard Encodings | |
| ------------------ | |
| Python comes with a number of codecs built-in, either implemented as C functions | |
| or with dictionaries as mapping tables. The following table lists the codecs by | |
| name, together with a few common aliases, and the languages for which the | |
| encoding is likely used. Neither the list of aliases nor the list of languages | |
| is meant to be exhaustive. Notice that spelling alternatives that only differ in | |
| case or use a space or a hyphen instead of an underscore are also valid aliases | |
| because they are equivalent when normalized by | |
| :func:`~encodings.normalize_encoding`. For example, ``'utf-8'`` is a valid | |
| alias for the ``'utf_8'`` codec. | |
| .. note:: | |
| The below table lists the most common aliases, for a complete list | |
| refer to the source :source:`aliases.py <Lib/encodings/aliases.py>` file. | |
| On Windows, ``cpXXX`` codecs are available for all code pages. | |
| But only codecs listed in the following table are guaranteed to exist on | |
| other platforms. | |
| On platforms that provide the C library's :manpage:`iconv(3)` function | |
| (such as those using the GNU C Library), | |
| every encoding known to ``iconv`` for which Python has no built-in codec | |
| is available as well. | |
| Such an encoding is looked up by its ``iconv`` name (for example ``cp1133``). | |
| Prefixing the name with ``iconv:`` forces the use of the ``iconv``-based codec | |
| even when a built-in codec of the same name exists (for example ``iconv:latin1``), | |
| which is mostly useful for testing. | |
| .. versionchanged:: 3.16 | |
| Added support for encodings provided by the C library's ``iconv``. | |
| .. impl-detail:: | |
| Some common encodings can bypass the codecs lookup machinery to | |
| improve performance. These optimization opportunities are only | |
| recognized by CPython for a limited set of (case insensitive) | |
| aliases: utf-8, utf8, latin-1, latin1, iso-8859-1, iso8859-1, mbcs | |
| (Windows only), ascii, us-ascii, utf-16, utf16, utf-32, utf32, and | |
| the same using underscores instead of dashes. Using alternative | |
| aliases for these encodings may result in slower execution. | |
| .. versionchanged:: 3.6 | |
| Optimization opportunity recognized for us-ascii. | |
| Many of the character sets support the same languages. They vary in individual | |
| characters (e.g. whether the EURO SIGN is supported or not), and in the | |
| assignment of characters to code positions. For the European languages in | |
| particular, the following variants typically exist: | |
| * an ISO 8859 codeset | |
| * a Microsoft Windows code page, which is typically derived from an 8859 codeset, | |
| but replaces control characters with additional graphic characters | |
| * an IBM EBCDIC code page | |
| * an IBM PC code page, which is ASCII compatible | |
| .. tabularcolumns:: |l|p{0.3\linewidth}|p{0.3\linewidth}| | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | Codec | Aliases | Languages | | |
| +=================+================================+================================+ | |
| | ascii | 646, us-ascii | English | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | big5 | big5-tw, csbig5 | Traditional Chinese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | big5hkscs | big5-hkscs, hkscs | Traditional Chinese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp037 | IBM037, IBM039 | English | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp273 | 273, IBM273, csIBM273 | German | | |
| | | | | | |
| | | | .. versionadded:: 3.4 | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp424 | EBCDIC-CP-HE, IBM424 | Hebrew | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp437 | 437, IBM437 | English | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp500 | EBCDIC-CP-BE, EBCDIC-CP-CH, | Western Europe | | |
| | | IBM500 | | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp720 | | Arabic | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp737 | | Greek | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp775 | IBM775 | Baltic languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp850 | 850, IBM850 | Western Europe | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp852 | 852, IBM852 | Central and Eastern Europe | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp855 | 855, IBM855 | Belarusian, Bulgarian, | | |
| | | | Macedonian, Russian, Serbian | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp856 | | Hebrew | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp857 | 857, IBM857 | Turkish | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp858 | 858, IBM00858 | Western Europe | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp860 | 860, IBM860 | Portuguese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp861 | 861, CP-IS, IBM861 | Icelandic | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp862 | 862, IBM862 | Hebrew | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp863 | 863, IBM863 | Canadian | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp864 | IBM864 | Arabic | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp865 | 865, IBM865 | Danish, Norwegian | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp866 | 866, IBM866 | Russian | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp869 | 869, CP-GR, IBM869 | Greek | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp874 | | Thai | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp875 | | Greek | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp932 | 932, ms932, mskanji, ms-kanji, | Japanese | | |
| | | windows-31j | | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp949 | 949, ms949, uhc | Korean | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp950 | 950, ms950 | Traditional Chinese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp1006 | | Urdu | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp1026 | ibm1026 | Turkish | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp1125 | 1125, ibm1125, cp866u, ruscii | Ukrainian | | |
| | | | | | |
| | | | .. versionadded:: 3.4 | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp1140 | IBM01140 | Western Europe | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp1250 | windows-1250 | Central and Eastern Europe | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp1251 | windows-1251 | Belarusian, Bulgarian, | | |
| | | | Macedonian, Russian, Serbian | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp1252 | windows-1252 | Western Europe | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp1253 | windows-1253 | Greek | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp1254 | windows-1254 | Turkish | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp1255 | windows-1255 | Hebrew | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp1256 | windows-1256 | Arabic | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp1257 | windows-1257 | Baltic languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | cp1258 | windows-1258 | Vietnamese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | euc_jp | eucjp, ujis, u-jis | Japanese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | euc_jis_2004 | jisx0213, eucjis2004 | Japanese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | euc_jisx0213 | eucjisx0213 | Japanese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | euc_kr | euckr, korean, ksc5601, | Korean | | |
| | | ks_c-5601, ks_c-5601-1987, | | | |
| | | ksx1001, ks_x-1001 | | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | gb2312 | chinese, csiso58gb231280, | Simplified Chinese | | |
| | | euc-cn, euccn, eucgb2312-cn, | | | |
| | | gb2312-1980, gb2312-80, | | | |
| | | iso-ir-58 | | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | gbk | 936, cp936, ms936 | Unified Chinese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | gb18030 | gb18030-2000 | Unified Chinese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | hz | hzgb, hz-gb, hz-gb-2312 | Simplified Chinese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso2022_jp | csiso2022jp, iso2022jp, | Japanese | | |
| | | iso-2022-jp | | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso2022_jp_1 | iso2022jp-1, iso-2022-jp-1 | Japanese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso2022_jp_2 | iso2022jp-2, iso-2022-jp-2 | Japanese, Korean, Simplified | | |
| | | | Chinese, Western Europe, Greek | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso2022_jp_2004 | iso2022jp-2004, | Japanese | | |
| | | iso-2022-jp-2004 | | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso2022_jp_3 | iso2022jp-3, iso-2022-jp-3 | Japanese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso2022_jp_ext | iso2022jp-ext, iso-2022-jp-ext | Japanese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso2022_kr | csiso2022kr, iso2022kr, | Korean | | |
| | | iso-2022-kr | | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | latin_1 | iso-8859-1, iso8859-1, 8859, | Western Europe | | |
| | | cp819, latin, latin1, L1 | | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_2 | iso-8859-2, latin2, L2 | Central and Eastern Europe | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_3 | iso-8859-3, latin3, L3 | Esperanto, Maltese | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_4 | iso-8859-4, latin4, L4 | Northern Europe | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_5 | iso-8859-5, cyrillic | Belarusian, Bulgarian, | | |
| | | | Macedonian, Russian, Serbian | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_6 | iso-8859-6, arabic | Arabic | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_7 | iso-8859-7, greek, greek8 | Greek | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_8 | iso-8859-8, hebrew | Hebrew | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_9 | iso-8859-9, latin5, L5 | Turkish | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_10 | iso-8859-10, latin6, L6 | Nordic languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_11 | iso-8859-11, thai | Thai languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_13 | iso-8859-13, latin7, L7 | Baltic languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_14 | iso-8859-14, latin8, L8 | Celtic languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_15 | iso-8859-15, latin9, L9 | Western Europe | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | iso8859_16 | iso-8859-16, latin10, L10 | South-Eastern Europe | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | johab | cp1361, ms1361 | Korean | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | koi8_r | | Russian | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | koi8_t | | Tajik | | |
| | | | | | |
| | | | .. versionadded:: 3.5 | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | koi8_u | | Ukrainian | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | kz1048 | kz_1048, strk1048_2002, rk1048 | Kazakh | | |
| | | | | | |
| | | | .. versionadded:: 3.5 | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | mac_cyrillic | maccyrillic | Belarusian, Bulgarian, | | |
| | | | Macedonian, Russian, Serbian | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | mac_greek | macgreek | Greek | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | mac_iceland | maciceland | Icelandic | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | mac_latin2 | maclatin2, maccentraleurope, | Central and Eastern Europe | | |
| | | mac_centeuro | | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | mac_roman | macroman, macintosh | Western Europe | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | mac_turkish | macturkish | Turkish | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | ptcp154 | csptcp154, pt154, cp154, | Kazakh | | |
| | | cyrillic-asian | | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | shift_jis | csshiftjis, shiftjis, sjis, | Japanese | | |
| | | s_jis | | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | shift_jis_2004 | shiftjis2004, sjis_2004, | Japanese | | |
| | | sjis2004 | | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | shift_jisx0213 | shiftjisx0213, sjisx0213, | Japanese | | |
| | | s_jisx0213 | | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | utf_32 | U32, utf32 | all languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | utf_32_be | UTF-32BE | all languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | utf_32_le | UTF-32LE | all languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | utf_16 | U16, utf16 | all languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | utf_16_be | UTF-16BE | all languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | utf_16_le | UTF-16LE | all languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | utf_7 | U7, unicode-1-1-utf-7 | all languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | utf_8 | U8, UTF, utf8, cp65001 | all languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| | utf_8_sig | utf8-sig | all languages | | |
| +-----------------+--------------------------------+--------------------------------+ | |
| .. versionchanged:: 3.4 | |
| The utf-16\* and utf-32\* encoders no longer allow surrogate code points | |
| (``U+D800``--``U+DFFF``) to be encoded. | |
| The utf-32\* decoders no longer decode | |
| byte sequences that correspond to surrogate code points. | |
| .. versionchanged:: 3.8 | |
| ``cp65001`` is now an alias to ``utf_8``. | |
| .. versionchanged:: 3.14 | |
| On Windows, ``cpXXX`` codecs are now available for all code pages. | |
| Python Specific Encodings | |
| ------------------------- | |
| A number of predefined codecs are specific to Python, so their codec names have | |
| no meaning outside Python. These are listed in the tables below based on the | |
| expected input and output types (note that while text encodings are the most | |
| common use case for codecs, the underlying codec infrastructure supports | |
| arbitrary data transforms rather than just text encodings). For asymmetric | |
| codecs, the stated meaning describes the encoding direction. | |
| Text Encodings | |
| ^^^^^^^^^^^^^^ | |
| The following codecs provide :class:`str` to :class:`bytes` encoding and | |
| :term:`bytes-like object` to :class:`str` decoding, similar to the Unicode text | |
| encodings. | |
| .. tabularcolumns:: |l|p{0.3\linewidth}|p{0.3\linewidth}| | |
| +--------------------+---------+---------------------------+ | |
| | Codec | Aliases | Meaning | | |
| +====================+=========+===========================+ | |
| | idna | | Implement :rfc:`3490`, | | |
| | | | see also | | |
| | | | :mod:`encodings.idna`. | | |
| | | | Only ``errors='strict'`` | | |
| | | | is supported. | | |
| +--------------------+---------+---------------------------+ | |
| | mbcs | ansi, | Windows only: Encode the | | |
| | | dbcs | operand according to the | | |
| | | | ANSI codepage (CP_ACP). | | |
| +--------------------+---------+---------------------------+ | |
| | oem | | Windows only: Encode the | | |
| | | | operand according to the | | |
| | | | OEM codepage (CP_OEMCP). | | |
| | | | | | |
| | | | .. versionadded:: 3.6 | | |
| +--------------------+---------+---------------------------+ | |
| | palmos | | Encoding of PalmOS 3.5. | | |
| +--------------------+---------+---------------------------+ | |
| | punycode | | Implement :rfc:`3492`. | | |
| | | | Stateful codecs are not | | |
| | | | supported. | | |
| | | | | | |
| | | | .. warning:: | | |
| | | | | | |
| | | | The decoding and | | |
| | | | encoding algorithms | | |
| | | | scale poorly, so | | |
| | | | limit the length of | | |
| | | | untrusted input. | | |
| +--------------------+---------+---------------------------+ | |
| | raw_unicode_escape | | Latin-1 encoding with | | |
| | | | :samp:`\\u{XXXX}` and | | |
| | | | :samp:`\\U{XXXXXXXX}` | | |
| | | | for other code points. | | |
| | | | Existing | | |
| | | | backslashes are not | | |
| | | | escaped in any way. | | |
| | | | It is used in the Python | | |
| | | | pickle protocol. | | |
| +--------------------+---------+---------------------------+ | |
| | undefined | | This Codec should only | | |
| | | | be used for testing | | |
| | | | purposes. | | |
| | | | | | |
| | | | Raise an exception for | | |
| | | | all conversions, even | | |
| | | | empty strings. The error | | |
| | | | handler is ignored. | | |
| +--------------------+---------+---------------------------+ | |
| | unicode_escape | | Encoding suitable as the | | |
| | | | contents of a Unicode | | |
| | | | literal in ASCII-encoded | | |
| | | | Python source code, | | |
| | | | except that quotes are | | |
| | | | not escaped. Decode | | |
| | | | from Latin-1 source code. | | |
| | | | Beware that Python source | | |
| | | | code actually uses UTF-8 | | |
| | | | by default. | | |
| +--------------------+---------+---------------------------+ | |
| | utf-7-imap | mUTF-7 | Modified UTF-7 encoding | | |
| | | | of :rfc:`3501` for IMAP4 | | |
| | | | mailbox names. Only | | |
| | | | ``errors='strict'`` is | | |
| | | | supported. | | |
| | | | | | |
| | | | .. versionadded:: next | | |
| +--------------------+---------+---------------------------+ | |
| .. versionchanged:: 3.8 | |
| "unicode_internal" codec is removed. | |
| .. _binary-transforms: | |
| Binary Transforms | |
| ^^^^^^^^^^^^^^^^^ | |
| The following codecs provide binary transforms: :term:`bytes-like object` | |
| to :class:`bytes` mappings. They are not supported by :meth:`bytes.decode` | |
| (which only produces :class:`str` output). | |
| .. tabularcolumns:: |l|L|L|L| | |
| +----------------------+------------------+------------------------------+------------------------------+ | |
| | Codec | Aliases | Meaning | Encoder / decoder | | |
| +======================+==================+==============================+==============================+ | |
| | base64_codec [#b64]_ | base64, base_64 | Convert the operand to | :meth:`base64.encodebytes` / | | |
| | | | multiline MIME base64 (the | :meth:`base64.decodebytes` | | |
| | | | result always includes a | | | |
| | | | trailing ``'\n'``). | | | |
| | | | | | | |
| | | | .. versionchanged:: 3.4 | | | |
| | | | accepts any | | | |
| | | | :term:`bytes-like object` | | | |
| | | | as input for encoding and | | | |
| | | | decoding | | | |
| +----------------------+------------------+------------------------------+------------------------------+ | |
| | bz2_codec | bz2 | Compress the operand using | :meth:`bz2.compress` / | | |
| | | | bz2. | :meth:`bz2.decompress` | | |
| +----------------------+------------------+------------------------------+------------------------------+ | |
| | hex_codec | hex | Convert the operand to | :meth:`binascii.b2a_hex` / | | |
| | | | hexadecimal | :meth:`binascii.a2b_hex` | | |
| | | | representation, with two | | | |
| | | | digits per byte. | | | |
| +----------------------+------------------+------------------------------+------------------------------+ | |
| | quopri_codec | quopri, | Convert the operand to MIME | :meth:`quopri.encode` with | | |
| | | quotedprintable, | quoted printable. | ``quotetabs=True`` / | | |
| | | quoted_printable | | :meth:`quopri.decode` | | |
| +----------------------+------------------+------------------------------+------------------------------+ | |
| | uu_codec | uu | Convert the operand using | | | |
| | | | uuencode. | | | |
| +----------------------+------------------+------------------------------+------------------------------+ | |
| | zlib_codec | zip, zlib | Compress the operand using | :meth:`zlib.compress` / | | |
| | | | gzip. | :meth:`zlib.decompress` | | |
| +----------------------+------------------+------------------------------+------------------------------+ | |
| .. [#b64] In addition to :term:`bytes-like objects <bytes-like object>`, | |
| ``'base64_codec'`` also accepts ASCII-only instances of :class:`str` for | |
| decoding | |
| .. versionadded:: 3.2 | |
| Restoration of the binary transforms. | |
| .. versionchanged:: 3.4 | |
| Restoration of the aliases for the binary transforms. | |
| .. _standalone-codec-functions: | |
| Standalone Codec Functions | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| The following functions provide encoding and decoding functionality similar to codecs, | |
| but are not available as named codecs through :func:`codecs.encode` or :func:`codecs.decode`. | |
| They are used internally (for example, by :mod:`pickle`) and behave similarly to the | |
| ``string_escape`` codec that was removed in Python 3. | |
| .. function:: codecs.escape_encode(input, errors=None) | |
| Encode *input* using escape sequences. Similar to how :func:`repr` on bytes | |
| produces escaped byte values. | |
| *input* must be a :class:`bytes` object. | |
| Returns a tuple ``(output, length)`` where *output* is a :class:`bytes` | |
| object and *length* is the number of bytes consumed. | |
| .. function:: codecs.escape_decode(input, errors=None) | |
| Decode *input* from escape sequences back to the original bytes. | |
| *input* must be a :term:`bytes-like object`. | |
| Returns a tuple ``(output, length)`` where *output* is a :class:`bytes` | |
| object and *length* is the number of bytes consumed. | |
| .. _text-transforms: | |
| Text Transforms | |
| ^^^^^^^^^^^^^^^ | |
| The following codec provides a text transform: a :class:`str` to :class:`str` | |
| mapping. It is not supported by :meth:`str.encode` (which only produces | |
| :class:`bytes` output). | |
| .. tabularcolumns:: |l|l|L| | |
| +--------------------+---------+---------------------------+ | |
| | Codec | Aliases | Meaning | | |
| +====================+=========+===========================+ | |
| | rot_13 | rot13 | Return the Caesar-cypher | | |
| | | | encryption of the | | |
| | | | operand. | | |
| +--------------------+---------+---------------------------+ | |
| .. versionadded:: 3.2 | |
| Restoration of the ``rot_13`` text transform. | |
| .. versionchanged:: 3.4 | |
| Restoration of the ``rot13`` alias. | |
| :mod:`!encodings` --- Encodings package | |
| --------------------------------------- | |
| .. module:: encodings | |
| :synopsis: Encodings package | |
| This module implements the following functions: | |
| .. function:: normalize_encoding(encoding) | |
| Normalize encoding name *encoding*. | |
| Normalization works as follows: all non-alphanumeric characters except the | |
| dot used for Python package names are collapsed and replaced with a single | |
| underscore, leading and trailing underscores are removed. | |
| For example, ``' -;#'`` becomes ``'_'``. | |
| Note that *encoding* should be ASCII only. | |
| .. note:: | |
| The following functions should not be used directly, except for testing | |
| purposes; :func:`codecs.lookup` should be used instead. | |
| .. function:: search_function(encoding) | |
| Search for the codec module corresponding to the given encoding name | |
| *encoding*. | |
| This function first normalizes the *encoding* using | |
| :func:`normalize_encoding`, then looks for a corresponding alias. | |
| It attempts to import a codec module from the encodings package using either | |
| the alias or the normalized name. If the module is found and defines a valid | |
| ``getregentry()`` function that returns a :class:`codecs.CodecInfo` object, | |
| the codec is cached and returned. | |
| If the codec module defines a ``getaliases()`` function any returned aliases | |
| are registered for future use. | |
| .. function:: win32_code_page_search_function(encoding) | |
| Search for a Windows code page encoding *encoding* of the form ``cpXXXX``. | |
| If the code page is valid and supported, return a :class:`codecs.CodecInfo` | |
| object for it. | |
| .. availability:: Windows. | |
| .. versionadded:: 3.14 | |
| This module implements the following exception: | |
| .. exception:: CodecRegistryError | |
| Raised when a codec is invalid or incompatible. | |
| :mod:`!encodings.idna` --- Internationalized Domain Names in Applications | |
| ------------------------------------------------------------------------- | |
| .. module:: encodings.idna | |
| :synopsis: Internationalized Domain Names implementation | |
| This module implements :rfc:`3490` (Internationalized Domain Names in | |
| Applications) and :rfc:`3492` (Nameprep: A Stringprep Profile for | |
| Internationalized Domain Names (IDN)). It builds upon the ``punycode`` encoding | |
| and :mod:`stringprep`. | |
| If you need the IDNA 2008 standard from :rfc:`5891` and :rfc:`5895`, use the | |
| third-party :pypi:`idna` module. | |
| These RFCs together define a protocol to support non-ASCII characters in domain | |
| names. A domain name containing non-ASCII characters (such as | |
| ``www.Alliancefrançaise.nu``) is converted into an ASCII-compatible encoding | |
| (ACE, such as ``www.xn--alliancefranaise-npb.nu``). The ACE form of the domain | |
| name is then used in all places where arbitrary characters are not allowed by | |
| the protocol, such as DNS queries, HTTP :mailheader:`Host` fields, and so | |
| on. This conversion is carried out in the application; if possible invisible to | |
| the user: The application should transparently convert Unicode domain labels to | |
| IDNA on the wire, and convert back ACE labels to Unicode before presenting them | |
| to the user. | |
| Python supports this conversion in several ways: the ``idna`` codec performs | |
| conversion between Unicode and ACE, separating an input string into labels | |
| based on the separator characters defined in :rfc:`section 3.1 of RFC 3490 <3490#section-3.1>` | |
| and converting each label to ACE as required, and conversely separating an input | |
| byte string into labels based on the ``.`` separator and converting any ACE | |
| labels found into unicode. Furthermore, the :mod:`socket` module | |
| transparently converts Unicode host names to ACE, so that applications need not | |
| be concerned about converting host names themselves when they pass them to the | |
| socket module. On top of that, modules that have host names as function | |
| parameters, such as :mod:`http.client` and :mod:`ftplib`, accept Unicode host | |
| names (:mod:`http.client` then also transparently sends an IDNA hostname in the | |
| :mailheader:`Host` field if it sends that field at all). | |
| When receiving host names from the wire (such as in reverse name lookup), no | |
| automatic conversion to Unicode is performed: applications wishing to present | |
| such host names to the user should decode them to Unicode. | |
| The module :mod:`!encodings.idna` also implements the nameprep procedure, which | |
| performs certain normalizations on host names, to achieve case-insensitivity of | |
| international domain names, and to unify similar characters. The nameprep | |
| functions can be used directly if desired. | |
| .. function:: nameprep(label, *, limit=None) | |
| Return the nameprepped version of *label*. The implementation currently assumes | |
| query strings, so ``AllowUnassigned`` is true. | |
| Raise :exc:`UnicodeEncodeError` if the nameprep algorithm emits an error. | |
| If the *limit* argument is given, it should be set to the maximum size | |
| of an encoded A-label (that is, 63 for IDNA). | |
| :func:`!nameprep` will raise :exc:`UnicodeEncodeError` if the label is | |
| **much** larger than *limit*. | |
| Note that this is only a rough check meant to skip expensive processing | |
| of extremely large input; the caller should check any exact | |
| limits separately. | |
| .. warning:: | |
| For backwards compatibility, label size is unlimited by default. | |
| This may cause issues when processing the result with the | |
| ``punycode`` encoding, whose algorithms scale poorly. | |
| .. versionchanged:: 3.16 | |
| Added the *limit* parameter. | |
| .. function:: ToASCII(label) | |
| Convert a label to ASCII, as specified in :rfc:`3490`. ``UseSTD3ASCIIRules`` is | |
| assumed to be false. | |
| .. function:: ToUnicode(label) | |
| Convert a label to Unicode, as specified in :rfc:`3490`. | |
| :mod:`!encodings.mbcs` --- Windows ANSI codepage | |
| ------------------------------------------------ | |
| .. module:: encodings.mbcs | |
| :synopsis: Windows ANSI codepage | |
| This module implements the ANSI codepage (CP_ACP). | |
| .. availability:: Windows. | |
| .. versionchanged:: 3.2 | |
| Before 3.2, the *errors* argument was ignored; ``'replace'`` was always used | |
| to encode, and ``'ignore'`` to decode. | |
| .. versionchanged:: 3.3 | |
| Support any error handler. | |
| :mod:`!encodings.utf_8_sig` --- UTF-8 codec with BOM signature | |
| -------------------------------------------------------------- | |
| .. module:: encodings.utf_8_sig | |
| :synopsis: UTF-8 codec with BOM signature | |
| This module implements a variant of the UTF-8 codec. On encoding, a UTF-8 encoded | |
| BOM will be prepended to the UTF-8 encoded bytes. For the stateful encoder this | |
| is only done once (on the first write to the byte stream). On decoding, an | |
| optional UTF-8 encoded BOM at the start of the data will be skipped. |