import codecs import io # create a file with two lines with open('test.txt', 'w') as fp: print('first line\x0b\x0bblah blah\nsecond line\n', file=fp, end='') # codecs parses lines incorrectly print(list(codecs.getreader('utf-8')(open('test.txt', 'rb')))) #['first line\x0b', '\x0b', 'blah blah\n', 'second line\n', '\n'] # TextIOWrapper does it correctly with open('test.txt', 'rb') as bytes_fp: fp = io.TextIOWrapper(bytes_fp, encoding='utf-8') print(list(fp))