Проблема перегнать байты в текст

В общем когда пытаюсь перегнать байты в текст выдается такая ошибка

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 16: 
    invalid start byte

Ошибка происходит на этой строке

rt = codecs.utf_8_decode(bt)

Мне нужно чтобы он игнорировал эту строку или просто убрать b'' из значения в списке.

import codecs
text = open('main3.txt',"r")
line = text.readlines()

lis1=[]
lis2=[]
flag = 0 #1
g=0 #1
lis1.append("")


for x in enumerate(line):
    if x[1][:1] == "X":
       flag=1
    else:
        if flag==1:
            g+=1
            lis1.append("")
        flag = 0
    if flag==1:
        lis1[g]+=x[1][2:].replace("\n",'')

lis1.remove("")
for xml in lis1:
    bt = codecs.decode(xml, 'hex')
    lis2.append(bt)
    rt = codecs.utf_8_decode(bt)
    print(rt)

Текст из main3.txt

52464820020000004C02000022020000B80400002020202020
20202000000000B8040000140000003C56657273696F6E3E32
3C2F56657273696F6E3E1C0000003C466F726D61743E202020
20202020203C2F466F726D61743E202020180000003C456E63

Ответы (2 шт):

Автор решения: gil9red

Нужно знать какая кодировка использовалась, иначе будут проблемы вида codec can't decode byte 0xb8 in position 16: invalid start byte.

Вместо codecs.utf_8_decode использовал bytes.decode для того чтобы передать errors='replace', иначе будет такая же ошибка, а так хотя бы разберется.

Пример:

import codecs

text = """\
52464820020000004C02000022020000B80400002020202020
20202000000000B8040000140000003C56657273696F6E3E32
3C2F56657273696F6E3E1C0000003C466F726D61743E202020
20202020203C2F466F726D61743E202020180000003C456E63
"""
text = text.strip()

new_text = []

for line in text.splitlines():
    data = codecs.decode(line, 'hex')
    text = data.decode('utf-8', errors='replace')
    new_text.append(text)

print(''.join(new_text))
# RFH    L  "  �              �     <Version>2</Version>   <Format>        </Format>      <Enc
→ Ссылка
Автор решения: MarianD

Вы наверно хотели это сделать не так сложно:

import codecs

with open('main3.txt') as text:
    for line in text:
        print(codecs.decode(line.strip(), "hex")
              .decode("iso8859_5"))

Вывод:

RFH L"И     
   И<Version>2
</Version><Format>   
     </Format>   <Enc

Так как "iso8859_5" 1-байтовое кодирование, не будет никаких ошибок.

Вместо "iso8859_5" вы можете попробовать другой 1-байтовый кодек или "utf_8" (с почти тем же самым результатом), но в последнем случае добавите параметр "ignore" или "replace" для избежания ошибки — значит, последняя строка программы будет например

              .decode("utf-8", "ignore"))
→ Ссылка