cp65001.py 1.1 KB

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