Python3.0: tokenize y BytesIO
Pregunta
Cuando se trata de una cadena en tokenize
python3.0, ¿Por qué aparece un 'utf-8'
líder antes de las fichas de comienzo?
Desde el python3 docs , tokenize
ahora se debe utilizar de la siguiente manera:
g = tokenize(BytesIO(s.encode('utf-8')).readline)
Sin embargo, cuando se trata de esta en el terminal, ocurre lo siguiente:
>>> 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)
¿Qué pasa con el token utf-8
que precede a los demás? Se supone que pase esto? Si es así, entonces debería simplemente siempre salte el primer token?
[editar]
he encontrado que token de tipo 57 es tokenize.ENCODING , que fácilmente se pueden filtrar fuera de la corriente de contadores si es necesario.
Solución
Esa es la cookie de codificación de la fuente. Puede especificar uno explícitamente:
# -*- coding: utf-8 -*-
do_it()
De lo contrario Python asume el valor predeterminado de codificación, UTF-8 en Python 3.