1 """ Python 'utf-16' Codec
4 Written by Marc-Andre Lemburg (mal@lemburg.com).
6 (c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
13 encode
= codecs
.utf_16_encode
15 def decode(input, errors
='strict'):
16 return codecs
.utf_16_decode(input, errors
, True)
18 class IncrementalEncoder(codecs
.IncrementalEncoder
):
19 def __init__(self
, errors
='strict'):
20 codecs
.IncrementalEncoder
.__init
__(self
, errors
)
23 def encode(self
, input, final
=False):
24 if self
.encoder
is None:
25 result
= codecs
.utf_16_encode(input, self
.errors
)[0]
26 if sys
.byteorder
== 'little':
27 self
.encoder
= codecs
.utf_16_le_encode
29 self
.encoder
= codecs
.utf_16_be_encode
31 return self
.encoder(input, self
.errors
)[0]
34 codecs
.IncrementalEncoder
.reset(self
)
37 class IncrementalDecoder(codecs
.BufferedIncrementalDecoder
):
38 def __init__(self
, errors
='strict'):
39 codecs
.BufferedIncrementalDecoder
.__init
__(self
, errors
)
42 def _buffer_decode(self
, input, errors
, final
):
43 if self
.decoder
is None:
44 (output
, consumed
, byteorder
) = \
45 codecs
.utf_16_ex_decode(input, errors
, 0, final
)
47 self
.decoder
= codecs
.utf_16_le_decode
49 self
.decoder
= codecs
.utf_16_be_decode
51 raise UnicodeError("UTF-16 stream does not start with BOM")
52 return (output
, consumed
)
53 return self
.decoder(input, self
.errors
, final
)
56 codecs
.BufferedIncrementalDecoder
.reset(self
)
59 class StreamWriter(codecs
.StreamWriter
):
60 def __init__(self
, stream
, errors
='strict'):
61 self
.bom_written
= False
62 codecs
.StreamWriter
.__init
__(self
, stream
, errors
)
64 def encode(self
, input, errors
='strict'):
65 self
.bom_written
= True
66 result
= codecs
.utf_16_encode(input, errors
)
67 if sys
.byteorder
== 'little':
68 self
.encode
= codecs
.utf_16_le_encode
70 self
.encode
= codecs
.utf_16_be_encode
73 class StreamReader(codecs
.StreamReader
):
76 codecs
.StreamReader
.reset(self
)
79 except AttributeError:
82 def decode(self
, input, errors
='strict'):
83 (object, consumed
, byteorder
) = \
84 codecs
.utf_16_ex_decode(input, errors
, 0, False)
86 self
.decode
= codecs
.utf_16_le_decode
88 self
.decode
= codecs
.utf_16_be_decode
90 raise UnicodeError,"UTF-16 stream does not start with BOM"
91 return (object, consumed
)
93 ### encodings module API
96 return codecs
.CodecInfo(
100 incrementalencoder
=IncrementalEncoder
,
101 incrementaldecoder
=IncrementalDecoder
,
102 streamreader
=StreamReader
,
103 streamwriter
=StreamWriter
,