سؤال

عند محاولة ذلك tokenize سلسلة في Python3.0، لماذا أحصل على رائدة 'utf-8' قبل بدء الرموز؟

من python3 مستندات, 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.coding., ، والتي يمكن تصفيتها بسهولة خارج نطاق الرمز المميز إذا لزم الأمر.

هل كانت مفيدة؟

المحلول

هذا هو ملف تعريف الارتباط الترميز للمصدر. يمكنك تحديد واحد صراحة:

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

خلاف ذلك يفترض Python الترميز الافتراضي، UTF-8 في بيثون 3.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top