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
)
38 # state info we return to the caller:
39 # 0: stream is in natural order for this platform
40 # 2: endianness hasn't been determined yet
41 # (we're never writing in unnatural order)
42 return (2 if self
.encoder
is None else 0)
44 def setstate(self
, state
):
48 if sys
.byteorder
== 'little':
49 self
.encoder
= codecs
.utf_16_le_encode
51 self
.encoder
= codecs
.utf_16_be_encode
53 class IncrementalDecoder(codecs
.BufferedIncrementalDecoder
):
54 def __init__(self
, errors
='strict'):
55 codecs
.BufferedIncrementalDecoder
.__init
__(self
, errors
)
58 def _buffer_decode(self
, input, errors
, final
):
59 if self
.decoder
is None:
60 (output
, consumed
, byteorder
) = \
61 codecs
.utf_16_ex_decode(input, errors
, 0, final
)
63 self
.decoder
= codecs
.utf_16_le_decode
65 self
.decoder
= codecs
.utf_16_be_decode
67 raise UnicodeError("UTF-16 stream does not start with BOM")
68 return (output
, consumed
)
69 return self
.decoder(input, self
.errors
, final
)
72 codecs
.BufferedIncrementalDecoder
.reset(self
)
75 class StreamWriter(codecs
.StreamWriter
):
76 def __init__(self
, stream
, errors
='strict'):
77 codecs
.StreamWriter
.__init
__(self
, stream
, errors
)
81 codecs
.StreamWriter
.reset(self
)
84 def encode(self
, input, errors
='strict'):
85 if self
.encoder
is None:
86 result
= codecs
.utf_16_encode(input, errors
)
87 if sys
.byteorder
== 'little':
88 self
.encoder
= codecs
.utf_16_le_encode
90 self
.encoder
= codecs
.utf_16_be_encode
93 return self
.encoder(input, errors
)
95 class StreamReader(codecs
.StreamReader
):
98 codecs
.StreamReader
.reset(self
)
101 except AttributeError:
104 def decode(self
, input, errors
='strict'):
105 (object, consumed
, byteorder
) = \
106 codecs
.utf_16_ex_decode(input, errors
, 0, False)
108 self
.decode
= codecs
.utf_16_le_decode
110 self
.decode
= codecs
.utf_16_be_decode
112 raise UnicodeError,"UTF-16 stream does not start with BOM"
113 return (object, consumed
)
115 ### encodings module API
118 return codecs
.CodecInfo(
122 incrementalencoder
=IncrementalEncoder
,
123 incrementaldecoder
=IncrementalDecoder
,
124 streamreader
=StreamReader
,
125 streamwriter
=StreamWriter
,