File size: 3,883 Bytes
9273228
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Codec registry and support functions {#codec-registry}

> Register a new codec search function.
>
> As a side effect, this tries to load the `!encodings`{.interpreted-text role="mod"} package, if not yet done, to make sure that it is always first in the list of search functions.

> Unregister a codec search function and clear the registry\'s cache. If the search function is not registered, do nothing. Return 0 on success. Raise an exception and return -1 on error.
>
> ::: versionadded
> 3.10
> :::

> Return `1` or `0` depending on whether there is a registered codec for the given *encoding*. This function always succeeds.

> Generic codec based encoding API.
>
> *object* is passed through the encoder function found for the given *encoding* using the error handling method defined by *errors*. *errors* may be `NULL` to use the default method defined for the codec. Raises a `LookupError`{.interpreted-text role="exc"} if no encoder can be found.

> Generic codec based decoding API.
>
> *object* is passed through the decoder function found for the given *encoding* using the error handling method defined by *errors*. *errors* may be `NULL` to use the default method defined for the codec. Raises a `LookupError`{.interpreted-text role="exc"} if no decoder can be found.

## Codec lookup API

In the following functions, the *encoding* string is looked up converted to all lower-case characters, which makes encodings looked up through this mechanism effectively case-insensitive. If no codec is found, a `KeyError`{.interpreted-text role="exc"} is set and `NULL` returned.

> Get an encoder function for the given *encoding*.

> Get a decoder function for the given *encoding*.

> Get an `~codecs.IncrementalEncoder`{.interpreted-text role="class"} object for the given *encoding*.

> Get an `~codecs.IncrementalDecoder`{.interpreted-text role="class"} object for the given *encoding*.

> Get a `~codecs.StreamReader`{.interpreted-text role="class"} factory function for the given *encoding*.

> Get a `~codecs.StreamWriter`{.interpreted-text role="class"} factory function for the given *encoding*.

## Registry API for Unicode encoding error handlers

> Register the error handling callback function *error* under the given *name*. This callback function will be called by a codec when it encounters unencodable characters/undecodable bytes and *name* is specified as the error parameter in the call to the encode/decode function.
>
> The callback gets a single argument, an instance of `UnicodeEncodeError`{.interpreted-text role="exc"}, `UnicodeDecodeError`{.interpreted-text role="exc"} or `UnicodeTranslateError`{.interpreted-text role="exc"} that holds information about the problematic sequence of characters or bytes and their offset in the original string (see `unicodeexceptions`{.interpreted-text role="ref"} for functions to extract this information). The callback must either raise the given exception, or return a two-item tuple containing the replacement for the problematic sequence, and an integer giving the offset in the original string at which encoding/decoding should be resumed.
>
> Return `0` on success, `-1` on error.

> Lookup the error handling callback function registered under *name*. As a special case `NULL` can be passed, in which case the error handling callback for \"strict\" will be returned.

> Raise *exc* as an exception.

> Ignore the unicode error, skipping the faulty input.

> Replace the unicode encode error with `?` or `U+FFFD`.

> Replace the unicode encode error with XML character references.

> Replace the unicode encode error with backslash escapes (`\x`, `\u` and `\U`).

> Replace the unicode encode error with `\N{...}` escapes.
>
> ::: versionadded
> 3.5
> :::

## Codec utility variables

> A string constant containing the lowercase hexadecimal digits: `"0123456789abcdef"`.
>
> ::: versionadded
> 3.3
> :::