utf_16.py (3634B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\encodings\utf_16.py 2 import codecs, sys 3 encode = codecs.utf_16_encode 4 5 def decode(input, errors = 'strict'): 6 return codecs.utf_16_decode(input, errors, True) 7 8 9 class IncrementalEncoder(codecs.IncrementalEncoder): 10 11 def __init__(self, errors = 'strict'): 12 codecs.IncrementalEncoder.__init__(self, errors) 13 self.encoder = None 14 15 def encode(self, input, final = False): 16 if self.encoder is None: 17 result = codecs.utf_16_encode(input, self.errors)[0] 18 if sys.byteorder == 'little': 19 self.encoder = codecs.utf_16_le_encode 20 else: 21 self.encoder = codecs.utf_16_be_encode 22 return result 23 return self.encoder(input, self.errors)[0] 24 25 def reset(self): 26 codecs.IncrementalEncoder.reset(self) 27 self.encoder = None 28 29 def getstate(self): 30 if self.encoder is None: 31 return 2 32 return 0 33 34 def setstate(self, state): 35 if state: 36 self.encoder = None 37 elif sys.byteorder == 'little': 38 self.encoder = codecs.utf_16_le_encode 39 else: 40 self.encoder = codecs.utf_16_be_encode 41 42 43 class IncrementalDecoder(codecs.BufferedIncrementalDecoder): 44 45 def __init__(self, errors = 'strict'): 46 codecs.BufferedIncrementalDecoder.__init__(self, errors) 47 self.decoder = None 48 49 def _buffer_decode(self, input, errors, final): 50 if self.decoder is None: 51 output, consumed, byteorder = codecs.utf_16_ex_decode(input, errors, 0, final) 52 if byteorder == -1: 53 self.decoder = codecs.utf_16_le_decode 54 elif byteorder == 1: 55 self.decoder = codecs.utf_16_be_decode 56 elif consumed >= 2: 57 raise UnicodeError('UTF-16 stream does not start with BOM') 58 return (output, consumed) 59 return self.decoder(input, self.errors, final) 60 61 def reset(self): 62 codecs.BufferedIncrementalDecoder.reset(self) 63 self.decoder = None 64 65 66 class StreamWriter(codecs.StreamWriter): 67 68 def __init__(self, stream, errors = 'strict'): 69 codecs.StreamWriter.__init__(self, stream, errors) 70 self.encoder = None 71 72 def reset(self): 73 codecs.StreamWriter.reset(self) 74 self.encoder = None 75 76 def encode(self, input, errors = 'strict'): 77 if self.encoder is None: 78 result = codecs.utf_16_encode(input, errors) 79 if sys.byteorder == 'little': 80 self.encoder = codecs.utf_16_le_encode 81 else: 82 self.encoder = codecs.utf_16_be_encode 83 return result 84 else: 85 return self.encoder(input, errors) 86 87 88 class StreamReader(codecs.StreamReader): 89 90 def reset(self): 91 codecs.StreamReader.reset(self) 92 try: 93 del self.decode 94 except AttributeError: 95 pass 96 97 def decode(self, input, errors = 'strict'): 98 object, consumed, byteorder = codecs.utf_16_ex_decode(input, errors, 0, False) 99 if byteorder == -1: 100 self.decode = codecs.utf_16_le_decode 101 elif byteorder == 1: 102 self.decode = codecs.utf_16_be_decode 103 elif consumed >= 2: 104 raise UnicodeError, 'UTF-16 stream does not start with BOM' 105 return (object, consumed) 106 107 108 def getregentry(): 109 return codecs.CodecInfo(name='utf-16', encode=encode, decode=decode, incrementalencoder=IncrementalEncoder, incrementaldecoder=IncrementalDecoder, streamreader=StreamReader, streamwriter=StreamWriter)