Какие кодировки файлов поддерживаются для исходных файлов Python 3?

Прежде чем вы расскажете мне прочитать PEP 0263 , продолжайте читать …

Я не могу найти документацию, в которой подробно описаны кодировки файлов для исходных файлов Python 3 .

Я нашел сотни (тысячи?) Вопросов, ответов, сообщений, писем и т. Д. О том, как объявить – в верхней части исходного файла – кодировку этого исходного файла, но ни один из них не отвечает на мой вопрос. Потерпите меня и представьте (или попробуйте) следующее:

  1. Откройте Блокнот (я использую обычный старый блокнот в Windows 7, но я сомневаюсь, что это важно, я уверен, что ваш главный редактор может сделать что-то подобное.)
  2. Введите свою любимую строку кода Python (я использовал print( 'Hello, world!' ) )
  3. Выберите «Файл» -> «Сохранить»
  4. Выберите папку и имя файла (я использовал «E: \ Temp \ hello.py»)
  5. Измените параметр «Кодировка:» от стандартного «ANSI» до «Unicode»
  6. Нажмите «Сохранить»
  7. Откройте командную строку, перейдите в папку, содержащую ваш новый файл, и попробуйте запустить ее

Вот результат, который я получаю:

 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». Википедия говорит мне, что это в основном кодировка UTF-16. Без разницы. Мне все равно. Больше исследований показывает, что мой редактор вставил двухбайтную спецификацию (байтовый порядок) со значением «\ xff \ xfe» в передней части файла, чтобы указать кодировку файла. Так что, по крайней мере, я знаю, откуда приходит код «\ xff», из которого Python жалуется.

Поэтому я перехожу и читаю PEP 0263 – и все остальное, что касается этого – в Интернете, и я пытаюсь добавить такой комментарий в первую строку файла

 # coding: utf-16 

со всеми различными значениями для кодирования, и ничего не помогает. Но это не может помочь, правильно? Поскольку Python даже не добирается до моего объявления кодирования; Он задыхается от первого байта исходного файла!

Так что я действительно хочу знать …

  1. Почему интерпретатор Python 3 не может прочитать этот файл?
  2. Если «Unicode» или «UCS-2 Little Endian» или «UTF-16» или что-то еще не поддерживается, что такое ???

PS Я даже нашел еще один вопрос о StackOverflow, который, кажется, является точной проблемой, с которой я столкнулся, но он был закрыт – ошибочно, на мой взгляд, – как дубликат. 🙁

— РЕДАКТИРОВАТЬ —

Кто-то попросил мои «скомпилированные варианты». Вот некоторые результаты. Может быть, это поможет?

 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'} >>> 

One Solution collect form web for “Какие кодировки файлов поддерживаются для исходных файлов Python 3?”

Исходная кодировка должна быть:

  1. Кодирование, поддерживаемое версией Python. (Это зависит от версии и платформы, например, вы получаете только mbcs в Windows.)

  2. Loosely ASCII-совместимый, достаточно, чтобы объявление # coding: можно было читать с использованием ascii который является исходной исходной кодировкой, прежде чем будет прочитано какое-либо объявление. См. PEP0263 «Концепции», пункт 1.

Кодировка, которая вводит в заблуждение Windows «Unicode», UTF-16LE, не совместима с ASCII (и, как правило, представляет собой проблему с проблемами, которые следует избегать). Для обнаружения исходных файлов UTF-16 для Python потребуется специальная поддержка, зависящая от кодирования, и эта функция теперь была отклонена .

# coding: вы должны использовать почти всегда UTF-8.

  • python: открыть и прочитать файл, содержащий germanic umlaut, как unicode
  • CSV, DictWriter, unicode и utf-8
  • Русские символы в re (Python)
  • Работа с номерами UTF-8 в Python
  • Werkzeug повышает BrokenFilesystemWarning
  • В Python, как наиболее эффективно вырезать строку UTF-8 для доставки REST?
  • Проверьте строку, если это Юникод, какой стандарт UTF и длина его в байтах?
  • C ++ - Как читать символы Unicode (например, Hindi Script) с использованием C ++ или есть лучший способ с помощью какого-то другого языка программирования?
  • Django: символ не-ASCII
  • PyQt4: символ, не содержащий ASCII, обнаруженный в строке trUtf8
  • Python 2.7, Appengine Data Store и Unicode
  • Python - лучший язык программирования в мире.