NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)