This commit was manufactured by cvs2svn to create tag 'r221c2'.
[python/dscho.git] / Lib / encodings / utf_16.py
blob72be072474e8d6c0c12d07025d8c959c9b4bc2f2
1 """ Python 'utf-16' Codec
4 Written by Marc-Andre Lemburg (mal@lemburg.com).
6 (c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
8 """
9 import codecs, sys
11 ### Codec APIs
13 class Codec(codecs.Codec):
15 # Note: Binding these as C functions will result in the class not
16 # converting them to methods. This is intended.
17 encode = codecs.utf_16_encode
18 decode = codecs.utf_16_decode
20 class StreamWriter(Codec,codecs.StreamWriter):
21 def __init__(self, stream, errors='strict'):
22 self.bom_written = 0
23 codecs.StreamWriter.__init__(self, stream, errors)
25 def write(self, data):
26 result = codecs.StreamWriter.write(self, data)
27 if not self.bom_written:
28 self.bom_written = 1
29 if sys.byteorder == 'little':
30 self.encode = codecs.utf_16_le_encode
31 else:
32 self.encode = codecs.utf_16_be_encode
33 return result
35 class StreamReader(Codec,codecs.StreamReader):
36 def __init__(self, stream, errors='strict'):
37 self.bom_read = 0
38 codecs.StreamReader.__init__(self, stream, errors)
40 def read(self, size=-1):
41 if not self.bom_read:
42 signature = self.stream.read(2)
43 if signature == codecs.BOM_BE:
44 self.decode = codecs.utf_16_be_decode
45 elif signature == codecs.BOM_LE:
46 self.decode = codecs.utf_16_le_decode
47 else:
48 raise UnicodeError,"UTF-16 stream does not start with BOM"
49 if size > 2:
50 size -= 2
51 elif size >= 0:
52 size = 0
53 self.bom_read = 1
54 return codecs.StreamReader.read(self, size)
56 ### encodings module API
58 def getregentry():
60 return (Codec.encode,Codec.decode,StreamReader,StreamWriter)