Перед тем, как идти говоря мне читать PEP 0263, продолжайте читать ...Какие кодировки файлов поддерживаются для исходных файлов Python 3?
Я не могу найти никакой документации, которая детализирует , какие файловые кодировки поддерживаются для Python 3 исходных файлов.
Я нашел сотни (тысяч?) Вопросов, ответов, сообщений, писем и т. Д. О том, как объявить - в верхней части исходного файла - кодировку этого исходного файла, но никто из них не отвечает на мои вопрос. Медведь со мной, и представьте себе делать (или на самом деле попробовать) следующее:
- Откройте Блокнот (я использую обычный старый Блокнот на Windows 7, но я сомневаюсь, что это имеет значение, я уверен, что ваш начальник редактор может сделать что-то . подобное)
- Введите ваши любимые строки кода Python (я использовал
print('Hello, world!')
) - Выберите «файл» -> «Сохранить»
- Выберите имя папки и файла (я использовал «E: \ Temp \ привет. py ")
- Измените параметр« Кодировка: »по умолчанию« ANSI »на« Unicode »
- Нажмите «Сохранить»
- Откройте командную строку, перейдите в папку, содержащую новый файл, и попробуйте запустить его
Вот результат я получаю:
E:\Temp>python --version
Python 3.4.1
E:\Temp>python "hello.py"
File "hello.py", line 1
SyntaxError: Non-UTF-8 code starting with '\xff' in file hello.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
сейчас , когда я открою этот же файл в Notepad++ и посмотрю меню «Кодирование», у него есть опция «Кодировать в UCS-2 Little Endian». Wikipedia tells me, что это в основном кодировка UTF-16. Без разницы. Мне все равно. Больше исследований показывает, что мой редактор вставил двухбайтную спецификацию (байтовый порядок) со значением «\ xff \ xfe» в передней части файла, чтобы указать кодировку файла. Так что, по крайней мере, я знаю, откуда приходит код «\ xff», из которого Python жалуется.
Так я иду и читать PEP 0263 - и все остальное относительно этого - в Интернете, и я пытаюсь добавить комментарий, как это к первой строке файла
# coding: utf-16
со всеми видами различных значений кодирование, и ничего не помогает. Но это не может помочь, не так ли? Поскольку Python даже не добирается до моего объявления кодирования; Он задыхается от первого байта исходного файла!
Так что я действительно хочу знать ...
- Почему не интерпретатор Python 3 читать этот файл?
- Если «Unicode» или «UCS-2 Little Endian» или «UTF-16» или не поддерживается, что такое ???
P.S. Я даже нашел another question on StackOverflow, который, кажется, является точной проблемой, которую я имею, но он был закрыт - ошибочно, на мой взгляд, - как дубликат...? :(
--- EDIT ---
Кто-то просило мои "скомпилированные варианты" Вот некоторый выход Может быть, это поможет
E:\Temp>python
Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:38:22) [MSC v.1600 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sysconfig
>>> print(sysconfig.get_config_vars())
{'EXT_SUFFIX': '.pyd', 'srcdir': 'C:\\Python34', 'py_version_short': '3.4', 'base': 'C:\\Python34', 'prefix': 'C:\\Python34', 'projectbase': 'C:\\Python34', 'INCLUDEPY': 'C:\\Python34\\Include', 'platbase': 'C:\\Python34', 'py_version_nodot': '34', 'exec_prefix': 'C:\\Python34', 'EXE': '.exe', 'installed_base': 'C:\\Python34', 'SO': '.pyd', 'installed_platbase': 'C:\\Python34', 'VERSION': '34', 'BINLIBDEST': 'C:\\Python34\\Lib', 'LIBDEST': 'C:\\Python34\\Lib', 'userbase': 'C:\\Users\\alonghi\\AppData\\Roaming\\Python', 'py_version': '3.4.1', 'abiflags': '', 'BINDIR': 'C:\\Python34'}
>>>
Можете ли вы опубликовать весь файл hello.py сверху вниз, включая «shebang» '#!/Bin/env python' или что-то еще. Кроме того, ваши скомпилированные параметры могут помочь: 'import sysconfig; print (sysconfig.get_config_vars()) ' – jedwards
@jedwards Файл содержит одну строку кода, как указано. – aldo
@также, спасибо за «разъяснение», но это мало помогает. При этом, возможно, обратитесь к [this] (https://docs.python.org/2/library/codecs.html#standard-encodings). Я не знаю, является ли это список, который вам интересен, но он кажется правдоподобным. Удачи вам в вашем вопросе ... – jedwards