Для проекта, над которым я работаю, я хочу создать собственную кодировку текста, и для этого я использую модуль кодеков. Я создал инкрементальный кодировщик / декодер, но у меня возникли проблемы, потому что "final" параметр не устанавливается для метода IncrementalEncoder.encode при записи в файл с использованием этой кодировки. Мне интересно, это ошибка python или я что-то упускаю. Вот программа, которую я написал с бесполезной копией UTF-8, чтобы продемонстрировать проблему, которую я вижу:
import codecs
class MyIncrementalDecoder(codecs.IncrementalDecoder):
def decode(self, obj, final=False):
print('Bytes: ', obj)
print('Final: ', final)
return obj.decode('utf-8')
class MyIncrementalEncoder(codecs.IncrementalEncoder):
def encode(self, obj, final=False):
print('String: ', obj)
print('Final: ', final)
return obj.encode('utf-8')
my_utf_8 = codecs.CodecInfo(None, None, incrementaldecoder=MyIncrementalDecoder,
incrementalencoder=MyIncrementalEncoder)
def search(encoding_name):
if encoding_name.replace('-', '').replace(' ', '').replace('_', '') == 'myutf8':
return my_utf_8
codecs.register(search)
if __name__ == '__main__':
print("Encoding...")
with open(r'test.txt', 'w', encoding='myutf8') as file:
file.write('Hello World!')
print("Decoding...")
with open(r'test.txt', 'r', encoding='myutf8') as file:
print("File Text: ", file.read())
Это выводит следующее:
Encoding...
String: Hello World!
Final: False
Decoding...
Bytes: b'Hello World!'
Final: True
File Text: Hello World!
Я считаю, что " final "должен быть установлен в True при вызове метода encode (или должен быть второй вызов с final = True), потому что я закрываю файл после кодирования текста, но это не так. Я что-то пропустил? Есть ли какой-нибудь способ «доработать» кодировку? Спасибо.