Вы можете получить StreamReader для конкретной кодировки и передать ему поток.Он вернет только полностью декодированные кодовые точки.
#coding:utf8
import codecs
import io
# A file-like binary stream.
data = io.BytesIO('我是美国人。\n你是中国人。\n'.encode('utf8'))
# Get the UTF-8 StreamReader class and instantiate it on the data.
f = codecs.getreader('utf8')(data)
print(f.read(2))
f.seek(0)
for line in f:
print(line,end='')
Вывод:
我是
我是美国人。
你是中国人。