Какие кодировки файлов поддерживаются для исходных файлов 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.

  • Чтение utf-8 символов из файла gzip в python
  • Python правильное кодирование веб-сайта (красивый суп)
  • Проблемы с записью скребковых данных в csv со славянскими символами (UnicodeEncodeError & TypeError)
  • UnicodeEncodeError: кодек ascii не может кодировать символы в позиции 0-5: порядковый номер не в диапазоне (128)
  • Python, конвертировать 4-байтовый символ, чтобы избежать ошибки MySQL «Неверное строковое значение:»
  • В чем разница между префиксом u и префиксом unicode () в python?
  • gnu-binutils-strings utf-8 вместо utf-16 или ascii
  • Байты в строке юникода Python
  •  
    Interesting Posts for Van-Lav

    Проблема с использованием библиотеки PIL python для обрезки и сохранения изображения

    Скрипт Python не запускается через CGI на Apache2

    Как отслеживать ошибки протоколирования?

    django redirect после входа в систему не работает «next» не публикует?

    SQLAlchemy: изменение отдельного объекта

    Уменьшение объема памяти при многопроцессорности?

    Выполнение подпроцесса python через git hook

    Запуск Celery: AttributeError: объект 'module' не имеет атрибута 'celery'

    Преобразование файла BibTex в записи базы данных с использованием Python

    Установите цвет переднего плана cellrenderertext, когда выделена строка.

    реверсивный список с использованием нотации среза

    Pandas Dataframes to_html: выделение строк таблицы

    множественная замена регулярных выражений в нескольких файлах с использованием python

    Как реализовать приоритетные очереди в Python?

    Является ли python автоматическим распараллеливанием разделов IO- и CPU- или памяти?

    Python - лучший язык программирования в мире.