blob: 95cb2aecf0cc9ebebdbd938535740f57ed8d3bc8 [file] [log] [blame]
Victor Stinner2f3ca9f2011-10-27 01:38:56 +02001"""
2Code page 65001: Windows UTF-8 (CP_UTF8).
3"""
4
5import codecs
6import functools
7
8if not hasattr(codecs, 'code_page_encode'):
9 raise LookupError("cp65001 encoding is only available on Windows")
10
11### Codec APIs
12
13encode = functools.partial(codecs.code_page_encode, 65001)
Victor Stinner7d00cc12014-03-17 23:08:06 +010014_decode = functools.partial(codecs.code_page_decode, 65001)
15
16def decode(input, errors='strict'):
17 return codecs.code_page_decode(65001, input, errors, True)
Victor Stinner2f3ca9f2011-10-27 01:38:56 +020018
19class IncrementalEncoder(codecs.IncrementalEncoder):
20 def encode(self, input, final=False):
21 return encode(input, self.errors)[0]
22
23class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
Victor Stinner7d00cc12014-03-17 23:08:06 +010024 _buffer_decode = _decode
Victor Stinner2f3ca9f2011-10-27 01:38:56 +020025
26class StreamWriter(codecs.StreamWriter):
27 encode = encode
28
29class StreamReader(codecs.StreamReader):
Victor Stinner7d00cc12014-03-17 23:08:06 +010030 decode = _decode
Victor Stinner2f3ca9f2011-10-27 01:38:56 +020031
32### encodings module API
33
34def 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 )