1

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であり、必要に応じてトークンストリームから簡単に除外できることがわかりました。

4

1 に答える 1

2

これがソースのコーディングCookieです。明示的に指定できます。

# -*- coding: utf-8 -*-
do_it()

それ以外の場合、PythonはデフォルトのエンコーディングであるPython3のutf-8を想定しています。

于 2009-05-27T00:29:10.163 に答える