尝试在python3.0中tokenize
字符串时,为什么在标记开始前得到前导'utf-8'
?
在python3 docs中,现在应按以下方式使用tokenize
:
g = tokenize(BytesIO(s.encode('utf-8')).readline)
但是,在终端上尝试此操作时,会发生以下情况:
>>> from tokenize import tokenize
>>> from io import BytesIO
>>> g = tokenize(BytesIO('foo'.encode()).readline)
>>> next(g)
(57, 'utf-8', (0, 0), (0, 0), '')
>>> next(g)
(1, 'foo', (1, 0), (1, 3), 'foo')
>>> next(g)
(0, '', (2, 0), (2, 0), '')
>>> next(g)
utf-8
令牌在其他令牌之前是什么?这应该发生吗?如果是这样,那我应该总是跳过第一个令牌吗?[编辑]
我发现令牌类型57是tokenize.ENCODING,如果需要可以很容易地将其从令牌流中过滤掉。
最佳答案
那就是源代码的cookie。您可以明确指定一个:
# -*- coding: utf-8 -*-
do_it()
否则,Python会采用默认编码,即Python 3中的utf-8。
关于python - Python3.0: token 化和BytesIO,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/913409/