blob: d5c0d9fc52e058866fdc4518d263ac6512afe036 [file] [log] [blame]
Fred Drakeb7979c72000-04-06 14:21:58 +00001\section{\module{codecs} ---
Fred Drake69ca9502000-04-06 16:09:59 +00002 Codec registry and base classes}
Fred Drakeb7979c72000-04-06 14:21:58 +00003
Fred Drake69ca9502000-04-06 16:09:59 +00004\declaremodule{standard}{codecs}
Fred Drakeb7979c72000-04-06 14:21:58 +00005\modulesynopsis{Encode and decode data and streams.}
6\moduleauthor{Marc-Andre Lemburg}{mal@lemburg.com}
7\sectionauthor{Marc-Andre Lemburg}{mal@lemburg.com}
Martin v. Löwis2548c732003-04-18 10:39:54 +00008\sectionauthor{Martin v. L\"owis}{martin@v.loewis.de}
Fred Drakeb7979c72000-04-06 14:21:58 +00009
10\index{Unicode}
11\index{Codecs}
12\indexii{Codecs}{encode}
13\indexii{Codecs}{decode}
14\index{streams}
15\indexii{stackable}{streams}
16
17
18This module defines base classes for standard Python codecs (encoders
19and decoders) and provides access to the internal Python codec
Walter Dörwald3aeb6322002-09-02 13:14:32 +000020registry which manages the codec and error handling lookup process.
Fred Drakeb7979c72000-04-06 14:21:58 +000021
22It defines the following functions:
23
24\begin{funcdesc}{register}{search_function}
25Register a codec search function. Search functions are expected to
26take one argument, the encoding name in all lower case letters, and
27return a tuple of functions \code{(\var{encoder}, \var{decoder}, \var{stream_reader},
28\var{stream_writer})} taking the following arguments:
29
30 \var{encoder} and \var{decoder}: These must be functions or methods
Fred Drake602aa772000-10-12 20:50:55 +000031 which have the same interface as the
32 \method{encode()}/\method{decode()} methods of Codec instances (see
33 Codec Interface). The functions/methods are expected to work in a
34 stateless mode.
Fred Drakeb7979c72000-04-06 14:21:58 +000035
36 \var{stream_reader} and \var{stream_writer}: These have to be
37 factory functions providing the following interface:
38
Fred Drake602aa772000-10-12 20:50:55 +000039 \code{factory(\var{stream}, \var{errors}='strict')}
Fred Drakeb7979c72000-04-06 14:21:58 +000040
41 The factory functions must return objects providing the interfaces
Fred Drake69ca9502000-04-06 16:09:59 +000042 defined by the base classes \class{StreamWriter} and
43 \class{StreamReader}, respectively. Stream codecs can maintain
44 state.
Fred Drakeb7979c72000-04-06 14:21:58 +000045
Fred Drake69ca9502000-04-06 16:09:59 +000046 Possible values for errors are \code{'strict'} (raise an exception
47 in case of an encoding error), \code{'replace'} (replace malformed
Walter Dörwald72f86162002-11-19 21:51:35 +000048 data with a suitable replacement marker, such as \character{?}),
Fred Drake69ca9502000-04-06 16:09:59 +000049 \code{'ignore'} (ignore malformed data and continue without further
Walter Dörwald72f86162002-11-19 21:51:35 +000050 notice), \code{'xmlcharrefreplace'} (replace with the appropriate XML
51 character reference (for encoding only)) and \code{'backslashreplace'}
52 (replace with backslashed escape sequences (for encoding only)) as
53 well as any other error handling name defined via
54 \function{register_error()}.
Fred Drakeb7979c72000-04-06 14:21:58 +000055
56In case a search function cannot find a given encoding, it should
Fred Drake69ca9502000-04-06 16:09:59 +000057return \code{None}.
Fred Drakeb7979c72000-04-06 14:21:58 +000058\end{funcdesc}
59
60\begin{funcdesc}{lookup}{encoding}
61Looks up a codec tuple in the Python codec registry and returns the
62function tuple as defined above.
63
64Encodings are first looked up in the registry's cache. If not found,
65the list of registered search functions is scanned. If no codecs tuple
Fred Drake69ca9502000-04-06 16:09:59 +000066is found, a \exception{LookupError} is raised. Otherwise, the codecs
67tuple is stored in the cache and returned to the caller.
Fred Drakeb7979c72000-04-06 14:21:58 +000068\end{funcdesc}
69
Skip Montanarob02ea652002-04-17 19:33:06 +000070To simplify access to the various codecs, the module provides these
Marc-André Lemburg494f2ae2001-09-19 11:33:31 +000071additional functions which use \function{lookup()} for the codec
72lookup:
73
74\begin{funcdesc}{getencoder}{encoding}
75Lookup up the codec for the given encoding and return its encoder
76function.
77
78Raises a \exception{LookupError} in case the encoding cannot be found.
79\end{funcdesc}
80
81\begin{funcdesc}{getdecoder}{encoding}
82Lookup up the codec for the given encoding and return its decoder
83function.
84
85Raises a \exception{LookupError} in case the encoding cannot be found.
86\end{funcdesc}
87
88\begin{funcdesc}{getreader}{encoding}
89Lookup up the codec for the given encoding and return its StreamReader
90class or factory function.
91
92Raises a \exception{LookupError} in case the encoding cannot be found.
93\end{funcdesc}
94
95\begin{funcdesc}{getwriter}{encoding}
96Lookup up the codec for the given encoding and return its StreamWriter
97class or factory function.
98
99Raises a \exception{LookupError} in case the encoding cannot be found.
100\end{funcdesc}
101
Walter Dörwald3aeb6322002-09-02 13:14:32 +0000102\begin{funcdesc}{register_error}{name, error_handler}
103Register the error handling function \var{error_handler} under the
Raymond Hettinger8a64d402002-09-08 22:26:13 +0000104name \var{name}. \var{error_handler} will be called during encoding
Walter Dörwald3aeb6322002-09-02 13:14:32 +0000105and decoding in case of an error, when \var{name} is specified as the
Walter Dörwald2e0b18a2003-01-31 17:19:08 +0000106errors parameter.
107
108For encoding \var{error_handler} will be called with a
109\exception{UnicodeEncodeError} instance, which contains information about
110the location of the error. The error handler must either raise this or
111a different exception or return a tuple with a replacement for the
112unencodable part of the input and a position where encoding should
113continue. The encoder will encode the replacement and continue encoding
114the original input at the specified position. Negative position values
115will be treated as being relative to the end of the input string. If the
116resulting position is out of bound an IndexError will be raised.
117
118Decoding and translating works similar, except \exception{UnicodeDecodeError}
119or \exception{UnicodeTranslateError} will be passed to the handler and
120that the replacement from the error handler will be put into the output
121directly.
Walter Dörwald3aeb6322002-09-02 13:14:32 +0000122\end{funcdesc}
123
124\begin{funcdesc}{lookup_error}{name}
125Return the error handler previously register under the name \var{name}.
126
127Raises a \exception{LookupError} in case the handler cannot be found.
128\end{funcdesc}
129
130\begin{funcdesc}{strict_errors}{exception}
131Implements the \code{strict} error handling.
132\end{funcdesc}
133
134\begin{funcdesc}{replace_errors}{exception}
135Implements the \code{replace} error handling.
136\end{funcdesc}
137
138\begin{funcdesc}{ignore_errors}{exception}
139Implements the \code{ignore} error handling.
140\end{funcdesc}
141
142\begin{funcdesc}{xmlcharrefreplace_errors_errors}{exception}
143Implements the \code{xmlcharrefreplace} error handling.
144\end{funcdesc}
145
146\begin{funcdesc}{backslashreplace_errors_errors}{exception}
147Implements the \code{backslashreplace} error handling.
148\end{funcdesc}
149
Walter Dörwald1a7a8942002-11-02 13:32:07 +0000150To simplify working with encoded files or stream, the module
151also defines these utility functions:
152
Fred Drakee1b304d2000-07-24 19:35:52 +0000153\begin{funcdesc}{open}{filename, mode\optional{, encoding\optional{,
154 errors\optional{, buffering}}}}
Fred Drakeb7979c72000-04-06 14:21:58 +0000155Open an encoded file using the given \var{mode} and return
156a wrapped version providing transparent encoding/decoding.
157
Fred Drake0aa811c2001-10-20 04:24:09 +0000158\note{The wrapped version will only accept the object format
Fred Drakee1b304d2000-07-24 19:35:52 +0000159defined by the codecs, i.e.\ Unicode objects for most built-in
160codecs. Output is also codec-dependent and will usually be Unicode as
Fred Drake0aa811c2001-10-20 04:24:09 +0000161well.}
Fred Drakeb7979c72000-04-06 14:21:58 +0000162
163\var{encoding} specifies the encoding which is to be used for the
Raymond Hettinger7e431102003-09-22 15:00:55 +0000164file.
Fred Drakeb7979c72000-04-06 14:21:58 +0000165
166\var{errors} may be given to define the error handling. It defaults
Fred Drakee1b304d2000-07-24 19:35:52 +0000167to \code{'strict'} which causes a \exception{ValueError} to be raised
168in case an encoding error occurs.
Fred Drakeb7979c72000-04-06 14:21:58 +0000169
Fred Drake69ca9502000-04-06 16:09:59 +0000170\var{buffering} has the same meaning as for the built-in
171\function{open()} function. It defaults to line buffered.
Fred Drakeb7979c72000-04-06 14:21:58 +0000172\end{funcdesc}
173
Fred Drakee1b304d2000-07-24 19:35:52 +0000174\begin{funcdesc}{EncodedFile}{file, input\optional{,
175 output\optional{, errors}}}
Fred Drakeb7979c72000-04-06 14:21:58 +0000176Return a wrapped version of file which provides transparent
177encoding translation.
178
179Strings written to the wrapped file are interpreted according to the
180given \var{input} encoding and then written to the original file as
Fred Drakee1b304d2000-07-24 19:35:52 +0000181strings using the \var{output} encoding. The intermediate encoding will
Fred Drakeb7979c72000-04-06 14:21:58 +0000182usually be Unicode but depends on the specified codecs.
183
Fred Drakee1b304d2000-07-24 19:35:52 +0000184If \var{output} is not given, it defaults to \var{input}.
Fred Drakeb7979c72000-04-06 14:21:58 +0000185
186\var{errors} may be given to define the error handling. It defaults to
Fred Drakee1b304d2000-07-24 19:35:52 +0000187\code{'strict'}, which causes \exception{ValueError} to be raised in case
Fred Drakeb7979c72000-04-06 14:21:58 +0000188an encoding error occurs.
189\end{funcdesc}
190
Fred Drakeb7979c72000-04-06 14:21:58 +0000191The module also provides the following constants which are useful
192for reading and writing to platform dependent files:
193
194\begin{datadesc}{BOM}
195\dataline{BOM_BE}
196\dataline{BOM_LE}
Walter Dörwald474458d2002-06-04 15:16:29 +0000197\dataline{BOM_UTF8}
198\dataline{BOM_UTF16}
199\dataline{BOM_UTF16_BE}
200\dataline{BOM_UTF16_LE}
201\dataline{BOM_UTF32}
202\dataline{BOM_UTF32_BE}
203\dataline{BOM_UTF32_LE}
204These constants define various encodings of the Unicode byte order mark
205(BOM) used in UTF-16 and UTF-32 data streams to indicate the byte order
206used in the stream or file and in UTF-8 as a Unicode signature.
207\constant{BOM_UTF16} is either \constant{BOM_UTF16_BE} or
208\constant{BOM_UTF16_LE} depending on the platform's native byte order,
209\constant{BOM} is an alias for \constant{BOM_UTF16}, \constant{BOM_LE}
210for \constant{BOM_UTF16_LE} and \constant{BOM_BE} for \constant{BOM_UTF16_BE}.
211The others represent the BOM in UTF-8 and UTF-32 encodings.
Fred Drakeb7979c72000-04-06 14:21:58 +0000212\end{datadesc}
213
Fred Drakedc40ac02001-01-22 20:17:54 +0000214
Walter Dörwaldd4bfe2c2005-11-25 17:17:12 +0000215\subsection{Codec Base Classes \label{codec-base-classes}}
Fred Drake602aa772000-10-12 20:50:55 +0000216
Fred Drake9984e702005-10-20 17:52:05 +0000217The \module{codecs} module defines a set of base classes which define the
Fred Drake602aa772000-10-12 20:50:55 +0000218interface and can also be used to easily write you own codecs for use
219in Python.
220
221Each codec has to define four interfaces to make it usable as codec in
222Python: stateless encoder, stateless decoder, stream reader and stream
223writer. The stream reader and writers typically reuse the stateless
224encoder/decoder to implement the file protocols.
225
226The \class{Codec} class defines the interface for stateless
227encoders/decoders.
228
229To simplify and standardize error handling, the \method{encode()} and
230\method{decode()} methods may implement different error handling
231schemes by providing the \var{errors} string argument. The following
232string values are defined and implemented by all standard Python
233codecs:
234
Fred Drakedc40ac02001-01-22 20:17:54 +0000235\begin{tableii}{l|l}{code}{Value}{Meaning}
Walter Dörwald430b1562002-11-07 22:33:17 +0000236 \lineii{'strict'}{Raise \exception{UnicodeError} (or a subclass);
Fred Drakedc40ac02001-01-22 20:17:54 +0000237 this is the default.}
238 \lineii{'ignore'}{Ignore the character and continue with the next.}
239 \lineii{'replace'}{Replace with a suitable replacement character;
240 Python will use the official U+FFFD REPLACEMENT
Walter Dörwald430b1562002-11-07 22:33:17 +0000241 CHARACTER for the built-in Unicode codecs on
242 decoding and '?' on encoding.}
243 \lineii{'xmlcharrefreplace'}{Replace with the appropriate XML
244 character reference (only for encoding).}
245 \lineii{'backslashreplace'}{Replace with backslashed escape sequences
246 (only for encoding).}
Fred Drakedc40ac02001-01-22 20:17:54 +0000247\end{tableii}
Fred Drake602aa772000-10-12 20:50:55 +0000248
Walter Dörwald430b1562002-11-07 22:33:17 +0000249The set of allowed values can be extended via \method{register_error}.
250
Fred Drake602aa772000-10-12 20:50:55 +0000251
252\subsubsection{Codec Objects \label{codec-objects}}
253
254The \class{Codec} class defines these methods which also define the
255function interfaces of the stateless encoder and decoder:
256
257\begin{methoddesc}{encode}{input\optional{, errors}}
258 Encodes the object \var{input} and returns a tuple (output object,
Skip Montanaro6c7bc312002-04-16 15:12:10 +0000259 length consumed). While codecs are not restricted to use with Unicode, in
260 a Unicode context, encoding converts a Unicode object to a plain string
261 using a particular character set encoding (e.g., \code{cp1252} or
262 \code{iso-8859-1}).
Fred Drake602aa772000-10-12 20:50:55 +0000263
264 \var{errors} defines the error handling to apply. It defaults to
265 \code{'strict'} handling.
266
267 The method may not store state in the \class{Codec} instance. Use
268 \class{StreamCodec} for codecs which have to keep state in order to
269 make encoding/decoding efficient.
270
271 The encoder must be able to handle zero length input and return an
272 empty object of the output object type in this situation.
273\end{methoddesc}
274
275\begin{methoddesc}{decode}{input\optional{, errors}}
276 Decodes the object \var{input} and returns a tuple (output object,
Skip Montanaro6c7bc312002-04-16 15:12:10 +0000277 length consumed). In a Unicode context, decoding converts a plain string
278 encoded using a particular character set encoding to a Unicode object.
Fred Drake602aa772000-10-12 20:50:55 +0000279
280 \var{input} must be an object which provides the \code{bf_getreadbuf}
281 buffer slot. Python strings, buffer objects and memory mapped files
282 are examples of objects providing this slot.
283
284 \var{errors} defines the error handling to apply. It defaults to
285 \code{'strict'} handling.
286
287 The method may not store state in the \class{Codec} instance. Use
288 \class{StreamCodec} for codecs which have to keep state in order to
289 make encoding/decoding efficient.
290
291 The decoder must be able to handle zero length input and return an
292 empty object of the output object type in this situation.
293\end{methoddesc}
294
295The \class{StreamWriter} and \class{StreamReader} classes provide
296generic working interfaces which can be used to implement new
297encodings submodules very easily. See \module{encodings.utf_8} for an
298example on how this is done.
299
300
301\subsubsection{StreamWriter Objects \label{stream-writer-objects}}
302
303The \class{StreamWriter} class is a subclass of \class{Codec} and
304defines the following methods which every stream writer must define in
305order to be compatible to the Python codec registry.
306
307\begin{classdesc}{StreamWriter}{stream\optional{, errors}}
308 Constructor for a \class{StreamWriter} instance.
309
310 All stream writers must provide this constructor interface. They are
311 free to add additional keyword arguments, but only the ones defined
312 here are used by the Python codec registry.
313
314 \var{stream} must be a file-like object open for writing (binary)
315 data.
316
317 The \class{StreamWriter} may implement different error handling
318 schemes by providing the \var{errors} keyword argument. These
Walter Dörwald430b1562002-11-07 22:33:17 +0000319 parameters are predefined:
Fred Drake602aa772000-10-12 20:50:55 +0000320
321 \begin{itemize}
322 \item \code{'strict'} Raise \exception{ValueError} (or a subclass);
323 this is the default.
324 \item \code{'ignore'} Ignore the character and continue with the next.
325 \item \code{'replace'} Replace with a suitable replacement character
Walter Dörwald430b1562002-11-07 22:33:17 +0000326 \item \code{'xmlcharrefreplace'} Replace with the appropriate XML
327 character reference
328 \item \code{'backslashreplace'} Replace with backslashed escape sequences.
Fred Drake602aa772000-10-12 20:50:55 +0000329 \end{itemize}
Walter Dörwald430b1562002-11-07 22:33:17 +0000330
331 The \var{errors} argument will be assigned to an attribute of the
332 same name. Assigning to this attribute makes it possible to switch
333 between different error handling strategies during the lifetime
334 of the \class{StreamWriter} object.
335
336 The set of allowed values for the \var{errors} argument can
337 be extended with \function{register_error()}.
Fred Drake602aa772000-10-12 20:50:55 +0000338\end{classdesc}
339
340\begin{methoddesc}{write}{object}
341 Writes the object's contents encoded to the stream.
342\end{methoddesc}
343
344\begin{methoddesc}{writelines}{list}
345 Writes the concatenated list of strings to the stream (possibly by
346 reusing the \method{write()} method).
347\end{methoddesc}
348
349\begin{methoddesc}{reset}{}
350 Flushes and resets the codec buffers used for keeping state.
351
352 Calling this method should ensure that the data on the output is put
353 into a clean state, that allows appending of new fresh data without
354 having to rescan the whole stream to recover state.
355\end{methoddesc}
356
357In addition to the above methods, the \class{StreamWriter} must also
358inherit all other methods and attribute from the underlying stream.
359
360
361\subsubsection{StreamReader Objects \label{stream-reader-objects}}
362
363The \class{StreamReader} class is a subclass of \class{Codec} and
364defines the following methods which every stream reader must define in
365order to be compatible to the Python codec registry.
366
367\begin{classdesc}{StreamReader}{stream\optional{, errors}}
368 Constructor for a \class{StreamReader} instance.
369
370 All stream readers must provide this constructor interface. They are
371 free to add additional keyword arguments, but only the ones defined
372 here are used by the Python codec registry.
373
374 \var{stream} must be a file-like object open for reading (binary)
375 data.
376
377 The \class{StreamReader} may implement different error handling
378 schemes by providing the \var{errors} keyword argument. These
379 parameters are defined:
380
381 \begin{itemize}
382 \item \code{'strict'} Raise \exception{ValueError} (or a subclass);
383 this is the default.
384 \item \code{'ignore'} Ignore the character and continue with the next.
385 \item \code{'replace'} Replace with a suitable replacement character.
386 \end{itemize}
Walter Dörwald430b1562002-11-07 22:33:17 +0000387
388 The \var{errors} argument will be assigned to an attribute of the
389 same name. Assigning to this attribute makes it possible to switch
390 between different error handling strategies during the lifetime
391 of the \class{StreamReader} object.
392
393 The set of allowed values for the \var{errors} argument can
394 be extended with \function{register_error()}.
Fred Drake602aa772000-10-12 20:50:55 +0000395\end{classdesc}
396
Martin v. Löwis56066d22005-08-24 07:38:12 +0000397\begin{methoddesc}{read}{\optional{size\optional{, chars, \optional{firstline}}}}
Fred Drake602aa772000-10-12 20:50:55 +0000398 Decodes data from the stream and returns the resulting object.
399
Walter Dörwald69652032004-09-07 20:24:22 +0000400 \var{chars} indicates the number of characters to read from the
Fred Drakea2544ee2004-09-10 01:16:49 +0000401 stream. \function{read()} will never return more than \var{chars}
Walter Dörwald69652032004-09-07 20:24:22 +0000402 characters, but it might return less, if there are not enough
403 characters available.
404
Fred Drake602aa772000-10-12 20:50:55 +0000405 \var{size} indicates the approximate maximum number of bytes to read
406 from the stream for decoding purposes. The decoder can modify this
407 setting as appropriate. The default value -1 indicates to read and
408 decode as much as possible. \var{size} is intended to prevent having
409 to decode huge files in one step.
410
Martin v. Löwis56066d22005-08-24 07:38:12 +0000411 \var{firstline} indicates that it would be sufficient to only return
412 the first line, if there are decoding errors on later lines.
413
Fred Drake602aa772000-10-12 20:50:55 +0000414 The method should use a greedy read strategy meaning that it should
415 read as much data as is allowed within the definition of the encoding
416 and the given size, e.g. if optional encoding endings or state
417 markers are available on the stream, these should be read too.
Walter Dörwald69652032004-09-07 20:24:22 +0000418
419 \versionchanged[\var{chars} argument added]{2.4}
Martin v. Löwis56066d22005-08-24 07:38:12 +0000420 \versionchanged[\var{firstline} argument added]{2.4.2}
Fred Drake602aa772000-10-12 20:50:55 +0000421\end{methoddesc}
422
Walter Dörwald69652032004-09-07 20:24:22 +0000423\begin{methoddesc}{readline}{\optional{size\optional{, keepends}}}
Fred Drake602aa772000-10-12 20:50:55 +0000424 Read one line from the input stream and return the
425 decoded data.
426
Fred Drake602aa772000-10-12 20:50:55 +0000427 \var{size}, if given, is passed as size argument to the stream's
428 \method{readline()} method.
Walter Dörwald69652032004-09-07 20:24:22 +0000429
430 If \var{keepends} is false lineends will be stripped from the
431 lines returned.
432
433 \versionchanged[\var{keepends} argument added]{2.4}
Fred Drake602aa772000-10-12 20:50:55 +0000434\end{methoddesc}
435
Walter Dörwald69652032004-09-07 20:24:22 +0000436\begin{methoddesc}{readlines}{\optional{sizehint\optional{, keepends}}}
Fred Drake602aa772000-10-12 20:50:55 +0000437 Read all lines available on the input stream and return them as list
438 of lines.
439
440 Line breaks are implemented using the codec's decoder method and are
Walter Dörwald69652032004-09-07 20:24:22 +0000441 included in the list entries if \var{keepends} is true.
Fred Drake602aa772000-10-12 20:50:55 +0000442
443 \var{sizehint}, if given, is passed as \var{size} argument to the
444 stream's \method{read()} method.
445\end{methoddesc}
446
447\begin{methoddesc}{reset}{}
448 Resets the codec buffers used for keeping state.
449
450 Note that no stream repositioning should take place. This method is
451 primarily intended to be able to recover from decoding errors.
452\end{methoddesc}
453
454In addition to the above methods, the \class{StreamReader} must also
455inherit all other methods and attribute from the underlying stream.
456
457The next two base classes are included for convenience. They are not
458needed by the codec registry, but may provide useful in practice.
459
460
461\subsubsection{StreamReaderWriter Objects \label{stream-reader-writer}}
462
463The \class{StreamReaderWriter} allows wrapping streams which work in
464both read and write modes.
465
466The design is such that one can use the factory functions returned by
467the \function{lookup()} function to construct the instance.
468
469\begin{classdesc}{StreamReaderWriter}{stream, Reader, Writer, errors}
470 Creates a \class{StreamReaderWriter} instance.
471 \var{stream} must be a file-like object.
472 \var{Reader} and \var{Writer} must be factory functions or classes
473 providing the \class{StreamReader} and \class{StreamWriter} interface
474 resp.
475 Error handling is done in the same way as defined for the
476 stream readers and writers.
477\end{classdesc}
478
479\class{StreamReaderWriter} instances define the combined interfaces of
480\class{StreamReader} and \class{StreamWriter} classes. They inherit
481all other methods and attribute from the underlying stream.
482
483
484\subsubsection{StreamRecoder Objects \label{stream-recoder-objects}}
485
486The \class{StreamRecoder} provide a frontend - backend view of
487encoding data which is sometimes useful when dealing with different
488encoding environments.
489
490The design is such that one can use the factory functions returned by
491the \function{lookup()} function to construct the instance.
492
493\begin{classdesc}{StreamRecoder}{stream, encode, decode,
494 Reader, Writer, errors}
495 Creates a \class{StreamRecoder} instance which implements a two-way
496 conversion: \var{encode} and \var{decode} work on the frontend (the
497 input to \method{read()} and output of \method{write()}) while
498 \var{Reader} and \var{Writer} work on the backend (reading and
499 writing to the stream).
500
501 You can use these objects to do transparent direct recodings from
502 e.g.\ Latin-1 to UTF-8 and back.
503
504 \var{stream} must be a file-like object.
505
506 \var{encode}, \var{decode} must adhere to the \class{Codec}
507 interface, \var{Reader}, \var{Writer} must be factory functions or
Raymond Hettingerf17d65d2003-08-12 00:01:16 +0000508 classes providing objects of the \class{StreamReader} and
Fred Drake602aa772000-10-12 20:50:55 +0000509 \class{StreamWriter} interface respectively.
510
511 \var{encode} and \var{decode} are needed for the frontend
512 translation, \var{Reader} and \var{Writer} for the backend
513 translation. The intermediate format used is determined by the two
514 sets of codecs, e.g. the Unicode codecs will use Unicode as
515 intermediate encoding.
516
517 Error handling is done in the same way as defined for the
518 stream readers and writers.
519\end{classdesc}
520
521\class{StreamRecoder} instances define the combined interfaces of
522\class{StreamReader} and \class{StreamWriter} classes. They inherit
523all other methods and attribute from the underlying stream.
524
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000525\subsection{Encodings and Unicode\label{encodings-overview}}
526
527Unicode strings are stored internally as sequences of codepoints (to
Georg Brandl131e4f72006-01-23 21:33:48 +0000528be precise as \ctype{Py_UNICODE} arrays). Depending on the way Python is
529compiled (either via \longprogramopt{enable-unicode=ucs2} or
530\longprogramopt{enable-unicode=ucs4}, with the former being the default)
531\ctype{Py_UNICODE} is either a 16-bit or
Martin v. Löwis412ed3b2006-01-08 10:45:39 +000053232-bit data type. Once a Unicode object is used outside of CPU and
533memory, CPU endianness and how these arrays are stored as bytes become
534an issue. Transforming a unicode object into a sequence of bytes is
535called encoding and recreating the unicode object from the sequence of
536bytes is known as decoding. There are many different methods how this
537transformation can be done (these methods are also called encodings).
538The simplest method is to map the codepoints 0-255 to the bytes
Georg Brandl131e4f72006-01-23 21:33:48 +0000539\code{0x0}-\code{0xff}. This means that a unicode object that contains
540codepoints above \code{U+00FF} can't be encoded with this method (which
541is called \code{'latin-1'} or \code{'iso-8859-1'}). unicode.encode() will
542raise a UnicodeEncodeError that looks like this: \samp{UnicodeEncodeError:
543'latin-1' codec can't encode character u'\e u1234' in position 3: ordinal
544not in range(256)}.
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000545
546There's another group of encodings (the so called charmap encodings)
547that choose a different subset of all unicode code points and how
Georg Brandl131e4f72006-01-23 21:33:48 +0000548these codepoints are mapped to the bytes \code{0x0}-\code{0xff.}
549To see how this is done simply open e.g. \file{encodings/cp1252.py}
550(which is an encoding that is used primarily on Windows).
551There's a string constant with 256 characters that shows you which
552character is mapped to which byte value.
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000553
554All of these encodings can only encode 256 of the 65536 (or 1114111)
555codepoints defined in unicode. A simple and straightforward way that
556can store each Unicode code point, is to store each codepoint as two
557consecutive bytes. There are two possibilities: Store the bytes in big
558endian or in little endian order. These two encodings are called
559UTF-16-BE and UTF-16-LE respectively. Their disadvantage is that if
560e.g. you use UTF-16-BE on a little endian machine you will always have
561to swap bytes on encoding and decoding. UTF-16 avoids this problem:
562Bytes will always be in natural endianness. When these bytes are read
563by a CPU with a different endianness, then bytes have to be swapped
564though. To be able to detect the endianness of a UTF-16 byte sequence,
565there's the so called BOM (the "Byte Order Mark"). This is the Unicode
Georg Brandl131e4f72006-01-23 21:33:48 +0000566character \code{U+FEFF}. This character will be prepended to every UTF-16
567byte sequence. The byte swapped version of this character (\code{0xFFFE}) is
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000568an illegal character that may not appear in a Unicode text. So when
Georg Brandl131e4f72006-01-23 21:33:48 +0000569the first character in an UTF-16 byte sequence appears to be a \code{U+FFFE}
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000570the bytes have to be swapped on decoding. Unfortunately upto Unicode
Georg Brandl131e4f72006-01-23 21:33:48 +00005714.0 the character \code{U+FEFF} had a second purpose as a \samp{ZERO WIDTH
572NO-BREAK SPACE}: A character that has no width and doesn't allow a
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000573word to be split. It can e.g. be used to give hints to a ligature
Georg Brandl131e4f72006-01-23 21:33:48 +0000574algorithm. With Unicode 4.0 using \code{U+FEFF} as a \samp{ZERO WIDTH NO-BREAK
575SPACE} has been deprecated (with \code{U+2060} (\samp{WORD JOINER}) assuming
576this role). Nevertheless Unicode software still must be able to handle
577\code{U+FEFF} in both roles: As a BOM it's a device to determine the storage
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000578layout of the encoded bytes, and vanishes once the byte sequence has
Georg Brandl131e4f72006-01-23 21:33:48 +0000579been decoded into a Unicode string; as a \samp{ZERO WIDTH NO-BREAK SPACE}
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000580it's a normal character that will be decoded like any other.
581
582There's another encoding that is able to encoding the full range of
583Unicode characters: UTF-8. UTF-8 is an 8bit encoding, which means
584there are no issues with byte order in UTF-8. Each byte in a UTF-8
585byte sequence consists of two parts: Marker bits (the most significant
586bits) and payload bits. The marker bits are a sequence of zero to six
5871 bits followed by a 0 bit. Unicode characters are encoded like this
Walter Dörwaldb754fe42006-01-09 12:45:01 +0000588(with x being payload bits, which when concatenated give the Unicode
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000589character):
590
591\begin{tableii}{l|l}{textrm}{}{Range}{Encoding}
Georg Brandl131e4f72006-01-23 21:33:48 +0000592\lineii{\code{U-00000000} ... \code{U-0000007F}}{0xxxxxxx}
593\lineii{\code{U-00000080} ... \code{U-000007FF}}{110xxxxx 10xxxxxx}
594\lineii{\code{U-00000800} ... \code{U-0000FFFF}}{1110xxxx 10xxxxxx 10xxxxxx}
595\lineii{\code{U-00010000} ... \code{U-001FFFFF}}{11110xxx 10xxxxxx 10xxxxxx 10xxxxxx}
596\lineii{\code{U-00200000} ... \code{U-03FFFFFF}}{111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx}
597\lineii{\code{U-04000000} ... \code{U-7FFFFFFF}}{1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx}
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000598\end{tableii}
599
600The least significant bit of the Unicode character is the rightmost x
601bit.
602
Georg Brandl131e4f72006-01-23 21:33:48 +0000603As UTF-8 is an 8bit encoding no BOM is required and any \code{U+FEFF}
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000604character in the decoded Unicode string (even if it's the first
Georg Brandl131e4f72006-01-23 21:33:48 +0000605character) is treated as a \samp{ZERO WIDTH NO-BREAK SPACE}.
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000606
607Without external information it's impossible to reliably determine
608which encoding was used for encoding a Unicode string. Each charmap
609encoding can decode any random byte sequence. However that's not
610possible with UTF-8, as UTF-8 byte sequences have a structure that
611doesn't allow arbitrary byte sequence. To increase the reliability
Walter Dörwaldb754fe42006-01-09 12:45:01 +0000612with which a UTF-8 encoding can be detected, Microsoft invented a
Georg Brandl131e4f72006-01-23 21:33:48 +0000613variant of UTF-8 (that Python 2.5 calls \code{"utf-8-sig"}) for its Notepad
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000614program: Before any of the Unicode characters is written to the file,
Georg Brandl131e4f72006-01-23 21:33:48 +0000615a UTF-8 encoded BOM (which looks like this as a byte sequence: \code{0xef},
616\code{0xbb}, \code{0xbf}) is written. As it's rather improbably that any
617charmap encoded file starts with these byte values (which would e.g. map to
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000618
Georg Brandl131e4f72006-01-23 21:33:48 +0000619 LATIN SMALL LETTER I WITH DIAERESIS \\
620 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \\
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000621 INVERTED QUESTION MARK
622
623in iso-8859-1), this increases the probability that a utf-8-sig
624encoding can be correctly guessed from the byte sequence. So here the
625BOM is not used to be able to determine the byte order used for
626generating the byte sequence, but as a signature that helps in
627guessing the encoding. On encoding the utf-8-sig codec will write
Georg Brandl131e4f72006-01-23 21:33:48 +0000628\code{0xef}, \code{0xbb}, \code{0xbf} as the first three bytes to the file.
629On decoding utf-8-sig will skip those three bytes if they appear as the
630first three bytes in the file.
Martin v. Löwis412ed3b2006-01-08 10:45:39 +0000631
632
Skip Montanaroecf7a522004-07-01 19:26:04 +0000633\subsection{Standard Encodings\label{standard-encodings}}
Martin v. Löwis5c37a772002-12-31 12:39:07 +0000634
635Python comes with a number of codecs builtin, either implemented as C
636functions, or with dictionaries as mapping tables. The following table
637lists the codecs by name, together with a few common aliases, and the
638languages for which the encoding is likely used. Neither the list of
639aliases nor the list of languages is meant to be exhaustive. Notice
640that spelling alternatives that only differ in case or use a hyphen
641instead of an underscore are also valid aliases.
642
643Many of the character sets support the same languages. They vary in
644individual characters (e.g. whether the EURO SIGN is supported or
645not), and in the assignment of characters to code positions. For the
646European languages in particular, the following variants typically
647exist:
648
649\begin{itemize}
650\item an ISO 8859 codeset
651\item a Microsoft Windows code page, which is typically derived from
652 a 8859 codeset, but replaces control characters with additional
653 graphic characters
654\item an IBM EBCDIC code page
Fred Draked4be7472003-04-30 15:02:07 +0000655\item an IBM PC code page, which is \ASCII{} compatible
Martin v. Löwis5c37a772002-12-31 12:39:07 +0000656\end{itemize}
657
658\begin{longtableiii}{l|l|l}{textrm}{Codec}{Aliases}{Languages}
659
660\lineiii{ascii}
661 {646, us-ascii}
662 {English}
663
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000664\lineiii{big5}
Hye-Shik Chang910d8f12004-07-17 14:44:43 +0000665 {big5-tw, csbig5}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000666 {Traditional Chinese}
667
Hye-Shik Chang2bb146f2004-07-18 03:06:29 +0000668\lineiii{big5hkscs}
669 {big5-hkscs, hkscs}
670 {Traditional Chinese}
671
Martin v. Löwis5c37a772002-12-31 12:39:07 +0000672\lineiii{cp037}
673 {IBM037, IBM039}
674 {English}
675
676\lineiii{cp424}
677 {EBCDIC-CP-HE, IBM424}
678 {Hebrew}
679
680\lineiii{cp437}
681 {437, IBM437}
682 {English}
683
684\lineiii{cp500}
685 {EBCDIC-CP-BE, EBCDIC-CP-CH, IBM500}
686 {Western Europe}
687
688\lineiii{cp737}
689 {}
690 {Greek}
691
692\lineiii{cp775}
693 {IBM775}
694 {Baltic languages}
695
696\lineiii{cp850}
697 {850, IBM850}
698 {Western Europe}
699
700\lineiii{cp852}
701 {852, IBM852}
702 {Central and Eastern Europe}
703
704\lineiii{cp855}
705 {855, IBM855}
706 {Bulgarian, Byelorussian, Macedonian, Russian, Serbian}
707
708\lineiii{cp856}
709 {}
710 {Hebrew}
711
712\lineiii{cp857}
713 {857, IBM857}
714 {Turkish}
715
716\lineiii{cp860}
717 {860, IBM860}
718 {Portuguese}
719
720\lineiii{cp861}
721 {861, CP-IS, IBM861}
722 {Icelandic}
723
724\lineiii{cp862}
725 {862, IBM862}
726 {Hebrew}
727
728\lineiii{cp863}
729 {863, IBM863}
730 {Canadian}
731
732\lineiii{cp864}
733 {IBM864}
734 {Arabic}
735
736\lineiii{cp865}
737 {865, IBM865}
738 {Danish, Norwegian}
739
Skip Montanaro78bace72004-07-02 02:14:34 +0000740\lineiii{cp866}
741 {866, IBM866}
742 {Russian}
743
Martin v. Löwis5c37a772002-12-31 12:39:07 +0000744\lineiii{cp869}
745 {869, CP-GR, IBM869}
746 {Greek}
747
748\lineiii{cp874}
749 {}
750 {Thai}
751
752\lineiii{cp875}
753 {}
754 {Greek}
755
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000756\lineiii{cp932}
Hye-Shik Chang910d8f12004-07-17 14:44:43 +0000757 {932, ms932, mskanji, ms-kanji}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000758 {Japanese}
759
760\lineiii{cp949}
761 {949, ms949, uhc}
762 {Korean}
763
764\lineiii{cp950}
765 {950, ms950}
766 {Traditional Chinese}
767
Martin v. Löwis5c37a772002-12-31 12:39:07 +0000768\lineiii{cp1006}
769 {}
770 {Urdu}
771
772\lineiii{cp1026}
773 {ibm1026}
774 {Turkish}
775
776\lineiii{cp1140}
777 {ibm1140}
778 {Western Europe}
779
780\lineiii{cp1250}
781 {windows-1250}
782 {Central and Eastern Europe}
783
784\lineiii{cp1251}
785 {windows-1251}
786 {Bulgarian, Byelorussian, Macedonian, Russian, Serbian}
787
788\lineiii{cp1252}
789 {windows-1252}
790 {Western Europe}
791
792\lineiii{cp1253}
793 {windows-1253}
794 {Greek}
795
796\lineiii{cp1254}
797 {windows-1254}
798 {Turkish}
799
800\lineiii{cp1255}
801 {windows-1255}
802 {Hebrew}
803
804\lineiii{cp1256}
805 {windows1256}
806 {Arabic}
807
808\lineiii{cp1257}
809 {windows-1257}
810 {Baltic languages}
811
812\lineiii{cp1258}
813 {windows-1258}
814 {Vietnamese}
815
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000816\lineiii{euc_jp}
Hye-Shik Chang910d8f12004-07-17 14:44:43 +0000817 {eucjp, ujis, u-jis}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000818 {Japanese}
819
Hye-Shik Chang2bb146f2004-07-18 03:06:29 +0000820\lineiii{euc_jis_2004}
821 {jisx0213, eucjis2004}
822 {Japanese}
823
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000824\lineiii{euc_jisx0213}
Hye-Shik Chang2bb146f2004-07-18 03:06:29 +0000825 {eucjisx0213}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000826 {Japanese}
827
828\lineiii{euc_kr}
Hye-Shik Chang910d8f12004-07-17 14:44:43 +0000829 {euckr, korean, ksc5601, ks_c-5601, ks_c-5601-1987, ksx1001, ks_x-1001}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000830 {Korean}
831
832\lineiii{gb2312}
Hye-Shik Chang910d8f12004-07-17 14:44:43 +0000833 {chinese, csiso58gb231280, euc-cn, euccn, eucgb2312-cn, gb2312-1980,
834 gb2312-80, iso-ir-58}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000835 {Simplified Chinese}
836
837\lineiii{gbk}
838 {936, cp936, ms936}
839 {Unified Chinese}
840
841\lineiii{gb18030}
Hye-Shik Chang910d8f12004-07-17 14:44:43 +0000842 {gb18030-2000}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000843 {Unified Chinese}
844
845\lineiii{hz}
Hye-Shik Chang910d8f12004-07-17 14:44:43 +0000846 {hzgb, hz-gb, hz-gb-2312}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000847 {Simplified Chinese}
848
849\lineiii{iso2022_jp}
Hye-Shik Chang910d8f12004-07-17 14:44:43 +0000850 {csiso2022jp, iso2022jp, iso-2022-jp}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000851 {Japanese}
852
853\lineiii{iso2022_jp_1}
Hye-Shik Chang910d8f12004-07-17 14:44:43 +0000854 {iso2022jp-1, iso-2022-jp-1}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000855 {Japanese}
856
857\lineiii{iso2022_jp_2}
Hye-Shik Chang910d8f12004-07-17 14:44:43 +0000858 {iso2022jp-2, iso-2022-jp-2}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000859 {Japanese, Korean, Simplified Chinese, Western Europe, Greek}
860
Hye-Shik Chang2bb146f2004-07-18 03:06:29 +0000861\lineiii{iso2022_jp_2004}
862 {iso2022jp-2004, iso-2022-jp-2004}
863 {Japanese}
864
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000865\lineiii{iso2022_jp_3}
Hye-Shik Chang910d8f12004-07-17 14:44:43 +0000866 {iso2022jp-3, iso-2022-jp-3}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000867 {Japanese}
868
869\lineiii{iso2022_jp_ext}
Hye-Shik Chang910d8f12004-07-17 14:44:43 +0000870 {iso2022jp-ext, iso-2022-jp-ext}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000871 {Japanese}
872
873\lineiii{iso2022_kr}
Hye-Shik Chang910d8f12004-07-17 14:44:43 +0000874 {csiso2022kr, iso2022kr, iso-2022-kr}
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000875 {Korean}
876
Martin v. Löwis5c37a772002-12-31 12:39:07 +0000877\lineiii{latin_1}
878 {iso-8859-1, iso8859-1, 8859, cp819, latin, latin1, L1}
879 {West Europe}
880
881\lineiii{iso8859_2}
882 {iso-8859-2, latin2, L2}
883 {Central and Eastern Europe}
884
885\lineiii{iso8859_3}
886 {iso-8859-3, latin3, L3}
887 {Esperanto, Maltese}
888
889\lineiii{iso8859_4}
890 {iso-8859-4, latin4, L4}
891 {Baltic languagues}
892
893\lineiii{iso8859_5}
894 {iso-8859-5, cyrillic}
895 {Bulgarian, Byelorussian, Macedonian, Russian, Serbian}
896
897\lineiii{iso8859_6}
898 {iso-8859-6, arabic}
899 {Arabic}
900
901\lineiii{iso8859_7}
902 {iso-8859-7, greek, greek8}
903 {Greek}
904
905\lineiii{iso8859_8}
906 {iso-8859-8, hebrew}
907 {Hebrew}
908
909\lineiii{iso8859_9}
910 {iso-8859-9, latin5, L5}
911 {Turkish}
912
913\lineiii{iso8859_10}
914 {iso-8859-10, latin6, L6}
915 {Nordic languages}
916
917\lineiii{iso8859_13}
918 {iso-8859-13}
919 {Baltic languages}
920
921\lineiii{iso8859_14}
922 {iso-8859-14, latin8, L8}
923 {Celtic languages}
924
925\lineiii{iso8859_15}
926 {iso-8859-15}
927 {Western Europe}
928
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000929\lineiii{johab}
930 {cp1361, ms1361}
931 {Korean}
932
Martin v. Löwis5c37a772002-12-31 12:39:07 +0000933\lineiii{koi8_r}
934 {}
935 {Russian}
936
937\lineiii{koi8_u}
938 {}
939 {Ukrainian}
940
941\lineiii{mac_cyrillic}
942 {maccyrillic}
943 {Bulgarian, Byelorussian, Macedonian, Russian, Serbian}
944
945\lineiii{mac_greek}
946 {macgreek}
947 {Greek}
948
949\lineiii{mac_iceland}
950 {maciceland}
951 {Icelandic}
952
953\lineiii{mac_latin2}
954 {maclatin2, maccentraleurope}
955 {Central and Eastern Europe}
956
957\lineiii{mac_roman}
958 {macroman}
959 {Western Europe}
960
961\lineiii{mac_turkish}
962 {macturkish}
963 {Turkish}
964
Hye-Shik Chang5c5316f2004-03-19 08:06:07 +0000965\lineiii{ptcp154}
966 {csptcp154, pt154, cp154, cyrillic-asian}
967 {Kazakh}
968
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000969\lineiii{shift_jis}
970 {csshiftjis, shiftjis, sjis, s_jis}
971 {Japanese}
972
Hye-Shik Chang2bb146f2004-07-18 03:06:29 +0000973\lineiii{shift_jis_2004}
974 {shiftjis2004, sjis_2004, sjis2004}
975 {Japanese}
976
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +0000977\lineiii{shift_jisx0213}
978 {shiftjisx0213, sjisx0213, s_jisx0213}
979 {Japanese}
980
Martin v. Löwis5c37a772002-12-31 12:39:07 +0000981\lineiii{utf_16}
982 {U16, utf16}
983 {all languages}
984
985\lineiii{utf_16_be}
986 {UTF-16BE}
987 {all languages (BMP only)}
988
989\lineiii{utf_16_le}
990 {UTF-16LE}
991 {all languages (BMP only)}
992
993\lineiii{utf_7}
Walter Dörwald007f8df2005-10-09 19:42:27 +0000994 {U7, unicode-1-1-utf-7}
Martin v. Löwis5c37a772002-12-31 12:39:07 +0000995 {all languages}
996
997\lineiii{utf_8}
998 {U8, UTF, utf8}
999 {all languages}
1000
Martin v. Löwis412ed3b2006-01-08 10:45:39 +00001001\lineiii{utf_8_sig}
1002 {}
1003 {all languages}
1004
Martin v. Löwis5c37a772002-12-31 12:39:07 +00001005\end{longtableiii}
1006
1007A number of codecs are specific to Python, so their codec names have
1008no meaning outside Python. Some of them don't convert from Unicode
1009strings to byte strings, but instead use the property of the Python
1010codecs machinery that any bijective function with one argument can be
1011considered as an encoding.
1012
1013For the codecs listed below, the result in the ``encoding'' direction
1014is always a byte string. The result of the ``decoding'' direction is
1015listed as operand type in the table.
1016
1017\begin{tableiv}{l|l|l|l}{textrm}{Codec}{Aliases}{Operand type}{Purpose}
1018
1019\lineiv{base64_codec}
1020 {base64, base-64}
1021 {byte string}
1022 {Convert operand to MIME base64}
1023
Raymond Hettinger9a80c5d2003-09-23 20:21:01 +00001024\lineiv{bz2_codec}
1025 {bz2}
1026 {byte string}
1027 {Compress the operand using bz2}
1028
Martin v. Löwis5c37a772002-12-31 12:39:07 +00001029\lineiv{hex_codec}
1030 {hex}
1031 {byte string}
Fred Draked4be7472003-04-30 15:02:07 +00001032 {Convert operand to hexadecimal representation, with two
1033 digits per byte}
Martin v. Löwis5c37a772002-12-31 12:39:07 +00001034
Martin v. Löwis2548c732003-04-18 10:39:54 +00001035\lineiv{idna}
1036 {}
1037 {Unicode string}
Fred Draked4be7472003-04-30 15:02:07 +00001038 {Implements \rfc{3490}.
Raymond Hettingeraa1178b2003-09-01 23:13:04 +00001039 \versionadded{2.3}
Fred Draked4be7472003-04-30 15:02:07 +00001040 See also \refmodule{encodings.idna}}
Martin v. Löwis2548c732003-04-18 10:39:54 +00001041
Martin v. Löwis5c37a772002-12-31 12:39:07 +00001042\lineiv{mbcs}
1043 {dbcs}
1044 {Unicode string}
1045 {Windows only: Encode operand according to the ANSI codepage (CP_ACP)}
1046
1047\lineiv{palmos}
1048 {}
1049 {Unicode string}
1050 {Encoding of PalmOS 3.5}
1051
Martin v. Löwis2548c732003-04-18 10:39:54 +00001052\lineiv{punycode}
1053 {}
1054 {Unicode string}
Fred Draked4be7472003-04-30 15:02:07 +00001055 {Implements \rfc{3492}.
1056 \versionadded{2.3}}
Martin v. Löwis2548c732003-04-18 10:39:54 +00001057
Martin v. Löwis5c37a772002-12-31 12:39:07 +00001058\lineiv{quopri_codec}
1059 {quopri, quoted-printable, quotedprintable}
1060 {byte string}
1061 {Convert operand to MIME quoted printable}
1062
1063\lineiv{raw_unicode_escape}
1064 {}
1065 {Unicode string}
Fred Draked4be7472003-04-30 15:02:07 +00001066 {Produce a string that is suitable as raw Unicode literal in
1067 Python source code}
Martin v. Löwis5c37a772002-12-31 12:39:07 +00001068
1069\lineiv{rot_13}
1070 {rot13}
1071 {byte string}
1072 {Returns the Caesar-cypher encryption of the operand}
1073
1074\lineiv{string_escape}
1075 {}
1076 {byte string}
Fred Draked4be7472003-04-30 15:02:07 +00001077 {Produce a string that is suitable as string literal in
1078 Python source code}
Martin v. Löwis5c37a772002-12-31 12:39:07 +00001079
1080\lineiv{undefined}
1081 {}
1082 {any}
Fred Draked4be7472003-04-30 15:02:07 +00001083 {Raise an exception for all conversion. Can be used as the
1084 system encoding if no automatic coercion between byte and
1085 Unicode strings is desired.}
Martin v. Löwis5c37a772002-12-31 12:39:07 +00001086
1087\lineiv{unicode_escape}
1088 {}
1089 {Unicode string}
Fred Draked4be7472003-04-30 15:02:07 +00001090 {Produce a string that is suitable as Unicode literal in
1091 Python source code}
Martin v. Löwis5c37a772002-12-31 12:39:07 +00001092
1093\lineiv{unicode_internal}
1094 {}
1095 {Unicode string}
Raymond Hettinger68804312005-01-01 00:28:46 +00001096 {Return the internal representation of the operand}
Martin v. Löwis5c37a772002-12-31 12:39:07 +00001097
1098\lineiv{uu_codec}
1099 {uu}
1100 {byte string}
1101 {Convert the operand using uuencode}
1102
1103\lineiv{zlib_codec}
1104 {zip, zlib}
1105 {byte string}
1106 {Compress the operand using gzip}
1107
1108\end{tableiv}
Martin v. Löwis2548c732003-04-18 10:39:54 +00001109
1110\subsection{\module{encodings.idna} ---
1111 Internationalized Domain Names in Applications}
1112
1113\declaremodule{standard}{encodings.idna}
1114\modulesynopsis{Internationalized Domain Names implementation}
Fred Draked4be7472003-04-30 15:02:07 +00001115% XXX The next line triggers a formatting bug, so it's commented out
1116% until that can be fixed.
1117%\moduleauthor{Martin v. L\"owis}
1118
1119\versionadded{2.3}
Martin v. Löwis2548c732003-04-18 10:39:54 +00001120
1121This module implements \rfc{3490} (Internationalized Domain Names in
1122Applications) and \rfc{3492} (Nameprep: A Stringprep Profile for
1123Internationalized Domain Names (IDN)). It builds upon the
Fred Draked24c7672003-07-16 05:17:23 +00001124\code{punycode} encoding and \refmodule{stringprep}.
Martin v. Löwis2548c732003-04-18 10:39:54 +00001125
Fred Draked4be7472003-04-30 15:02:07 +00001126These RFCs together define a protocol to support non-\ASCII{} characters
1127in domain names. A domain name containing non-\ASCII{} characters (such
Fred Draked24c7672003-07-16 05:17:23 +00001128as ``www.Alliancefran\c caise.nu'') is converted into an
Fred Draked4be7472003-04-30 15:02:07 +00001129\ASCII-compatible encoding (ACE, such as
Martin v. Löwis2548c732003-04-18 10:39:54 +00001130``www.xn--alliancefranaise-npb.nu''). The ACE form of the domain name
1131is then used in all places where arbitrary characters are not allowed
Fred Draked4be7472003-04-30 15:02:07 +00001132by the protocol, such as DNS queries, HTTP \mailheader{Host} fields, and so
Martin v. Löwis2548c732003-04-18 10:39:54 +00001133on. This conversion is carried out in the application; if possible
1134invisible to the user: The application should transparently convert
1135Unicode domain labels to IDNA on the wire, and convert back ACE labels
1136to Unicode before presenting them to the user.
1137
1138Python supports this conversion in several ways: The \code{idna} codec
1139allows to convert between Unicode and the ACE. Furthermore, the
Fred Draked24c7672003-07-16 05:17:23 +00001140\refmodule{socket} module transparently converts Unicode host names to
Martin v. Löwis2548c732003-04-18 10:39:54 +00001141ACE, so that applications need not be concerned about converting host
1142names themselves when they pass them to the socket module. On top of
1143that, modules that have host names as function parameters, such as
Fred Draked24c7672003-07-16 05:17:23 +00001144\refmodule{httplib} and \refmodule{ftplib}, accept Unicode host names
1145(\refmodule{httplib} then also transparently sends an IDNA hostname in
1146the \mailheader{Host} field if it sends that field at all).
Martin v. Löwis2548c732003-04-18 10:39:54 +00001147
1148When receiving host names from the wire (such as in reverse name
1149lookup), no automatic conversion to Unicode is performed: Applications
1150wishing to present such host names to the user should decode them to
1151Unicode.
1152
1153The module \module{encodings.idna} also implements the nameprep
1154procedure, which performs certain normalizations on host names, to
1155achieve case-insensitivity of international domain names, and to unify
1156similar characters. The nameprep functions can be used directly if
1157desired.
1158
1159\begin{funcdesc}{nameprep}{label}
1160Return the nameprepped version of \var{label}. The implementation
1161currently assumes query strings, so \code{AllowUnassigned} is
1162true.
1163\end{funcdesc}
1164
Raymond Hettingerb5155e32003-06-18 01:58:31 +00001165\begin{funcdesc}{ToASCII}{label}
Fred Draked4be7472003-04-30 15:02:07 +00001166Convert a label to \ASCII, as specified in \rfc{3490}.
Martin v. Löwis2548c732003-04-18 10:39:54 +00001167\code{UseSTD3ASCIIRules} is assumed to be false.
1168\end{funcdesc}
1169
1170\begin{funcdesc}{ToUnicode}{label}
1171Convert a label to Unicode, as specified in \rfc{3490}.
1172\end{funcdesc}
Martin v. Löwis412ed3b2006-01-08 10:45:39 +00001173
1174 \subsection{\module{encodings.utf_8_sig} ---
1175 UTF-8 codec with BOM signature}
1176\declaremodule{standard}{encodings.utf-8-sig} % XXX utf_8_sig gives TeX errors
1177\modulesynopsis{UTF-8 codec with BOM signature}
1178\moduleauthor{Walter D\"orwald}
1179
1180\versionadded{2.5}
1181
1182This module implements a variant of the UTF-8 codec: On encoding a
1183UTF-8 encoded BOM will be prepended to the UTF-8 encoded bytes. For
1184the stateful encoder this is only done once (on the first write to the
1185byte stream). For decoding an optional UTF-8 encoded BOM at the start
1186of the data will be skipped.