Home | History | Annotate | Download | only in encodings
      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