1 """ 2 Code page 65001: Windows UTF-8 (CP_UTF8). 3 """ 4 5 import codecs 6 import functools 7 8 if not hasattr(codecs, 'code_page_encode'): 9 raise LookupError("cp65001 encoding is only available on Windows") 10 11 ### Codec APIs 12 13 encode = functools.partial(codecs.code_page_encode, 65001) 14 _decode = functools.partial(codecs.code_page_decode, 65001) 15 16 def decode(input, errors='strict'): 17 return codecs.code_page_decode(65001, input, errors, True) 18 19 class IncrementalEncoder(codecs.IncrementalEncoder): 20 def encode(self, input, final=False): 21 return encode(input, self.errors)[0] 22 23 class IncrementalDecoder(codecs.BufferedIncrementalDecoder): 24 _buffer_decode = _decode 25 26 class StreamWriter(codecs.StreamWriter): 27 encode = encode 28 29 class StreamReader(codecs.StreamReader): 30 decode = _decode 31 32 ### encodings module API 33 34 def getregentry(): 35 return codecs.CodecInfo( 36 name='cp65001', 37 encode=encode, 38 decode=decode, 39 incrementalencoder=IncrementalEncoder, 40 incrementaldecoder=IncrementalDecoder, 41 streamreader=StreamReader, 42 streamwriter=StreamWriter, 43 ) 44