open file, выполнить декдорирование байтов из файла в эквивалентные печатные символы
Есть необходимость открыть файл 'b' режиме, для того, чтобы некоторые байты отобразить как символы (это действительно символы в utf-8). Для простоты составлен текстовый с En и Ru символами файл в utf-8
lst = []
s = 'None'
with open('file','rb') as fl:
while s!=b'':
s = fl.read(1)
lst.append(fl.read(1)) #считываю по 1 байту в список
for i in l: print(i.decode('utf-8'),end=' ') #хочу из сохранённых объектов bytes получить эквивалентные символы utf-8
Насколько я понимаю, итерируя в таком режиме объект file, я получаю именно содержимое файла побайтно в список. если это объект байт и я знаю, что это байт символа, я могу применить метод decode.
Но я получаю ошибку:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: unexpected end of data
Почему я не могу получить из байта, в котором символ этот самый символ.
Если я прямо делаю вот так:
a = 'Привет, мир!'
byte_s = a.encode('utf-8') #получил цепочку байтов
print(byte_s)
print(byte_s.decode('utf-8'))
Всё хорошо
Задаю литерально 2 кирилических символа - всё хорошо
f = b'\xd0\x9f'
print(f.decode('utf-8'))
Файл однозначно в utf-8.
linux, ubuntu, python3.10