Python3.0: токенизация и байты

1

При попытке tokenize строки в python3.0, почему я получаю ведущий '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, который может быть легко отфильтрован из потока токенов, если это необходимо.

Теги:
io
tokenize
bytesio

1 ответ

2
Лучший ответ

Это кодирование файла cookie источника. Вы можете указать явно:

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

В противном случае Python предполагает кодировку по умолчанию, utf-8 в Python 3.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню