在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,如果需要,可以很容易地从令牌流中过滤掉。
答案 0 :(得分:2)
这是源代码的编码cookie。您可以明确指定一个:
# -*- coding: utf-8 -*-
do_it()
否则Python假定使用Python 3中的默认编码utf-8。