Index: Lib/encodings/utf_16.py =================================================================== --- Lib/encodings/utf_16.py (révision 83122) +++ Lib/encodings/utf_16.py (copie de travail) @@ -34,6 +34,22 @@ codecs.IncrementalEncoder.reset(self) self.encoder = None + def getstate(self): + # state info we return to the caller: + # 0: stream is in natural order for this platform + # 2: endianness hasn't been determined yet + # (we're never writing in unnatural order) + return (2 if self.encoder is None else 0) + + def setstate(self, state): + if state: + self.encoder = None + else: + if sys.byteorder == 'little': + self.encoder = codecs.utf_16_le_encode + else: + self.encoder = codecs.utf_16_be_encode + class IncrementalDecoder(codecs.BufferedIncrementalDecoder): def __init__(self, errors='strict'): codecs.BufferedIncrementalDecoder.__init__(self, errors) Index: Lib/encodings/utf_8_sig.py =================================================================== --- Lib/encodings/utf_8_sig.py (révision 83122) +++ Lib/encodings/utf_8_sig.py (copie de travail) @@ -25,19 +25,25 @@ class IncrementalEncoder(codecs.IncrementalEncoder): def __init__(self, errors='strict'): codecs.IncrementalEncoder.__init__(self, errors) - self.first = True + self.first = 1 def encode(self, input, final=False): if self.first: - self.first = False + self.first = 0 return codecs.BOM_UTF8 + codecs.utf_8_encode(input, self.errors)[0] else: return codecs.utf_8_encode(input, self.errors)[0] def reset(self): codecs.IncrementalEncoder.reset(self) - self.first = True + self.first = 1 + def getstate(self): + return self.first + + def setstate(self, state): + self.first = state + class IncrementalDecoder(codecs.BufferedIncrementalDecoder): def __init__(self, errors='strict'): codecs.BufferedIncrementalDecoder.__init__(self, errors) Index: Lib/test/test_io.py =================================================================== --- Lib/test/test_io.py (révision 83122) +++ Lib/test/test_io.py (copie de travail) @@ -2087,7 +2087,6 @@ self.assertEqual(buffer.seekable(), txt.seekable()) - @unittest.skip("Issue #6213 with incremental encoders") def test_append_bom(self): # The BOM is not written again when appending to a non-empty file filename = support.TESTFN @@ -2103,7 +2102,6 @@ with self.open(filename, 'rb') as f: self.assertEquals(f.read(), 'aaaxxx'.encode(charset)) - @unittest.skip("Issue #6213 with incremental encoders") def test_seek_bom(self): # Same test, but when seeking manually filename = support.TESTFN