给定一个字节流(生成器,文件等),如何读取单个utf-8
编码字符?
我可以通过滚动我自己的utf-8
解码函数来解决这个问题,但我不想重新发明轮子,因为我确信这个功能必须已经在别处用来解析utf-8
字符串。
答案 0 :(得分:2)
使用encoding='utf8'
将流包裹在TextIOWrapper
中,然后在其上调用.read(1)
。
这假设您开始使用BufferedIOBase
或与其兼容的鸭子类型(即具有read()
方法)。如果您有生成器或迭代器,则可能需要调整接口。
示例:
from io import TextIOWrapper
with open('/path/to/file', 'rb') as f:
wf = TextIOWrapper(f, 'utf-8')
wf._CHUNK_SIZE = 1 # Implementation detail, may not work everywhere
wf.read(1) # gives next utf-8 encoded character
f.read(1) # gives next byte