Spec-Zone.ru › Python 3.10

codecs — Реестр кодеков и базовые классы

Исходный код: Lib/codecs.py

Этот модуль определяет базовые классы для стандартных кодеков Python (кодировщиков и декодеров) и предоставляет доступ к внутреннему реестру кодеков Python, который управляет процессом поиска кодеков и обработки ошибок. Большинство стандартных кодеков являются кодировками текста, которые кодируют текст в байты (и декодируют байты в текст), но также существуют кодеки, которые кодируют текст в текст и байты в байты. Пользовательские кодеки могут кодировать и декодировать между произвольными типами, но некоторые функции модуля ограничены в использовании только с кодировками текста или с кодеками, которые кодируют в bytes.

Модуль определяет следующие функции для кодирования и декодирования с любым кодеком:

codecs.encode(obj, encoding='utf-8', errors='strict')

Кодирует obj с помощью зарегистрированного кодека для encoding.

Errors можно указать для настройки желаемой схемы обработки ошибок. По умолчанию используется обработчик ошибок 'strict', означающий, что ошибки кодирования вызывают ValueError (или подкласс, специфичный для кодека, например, UnicodeEncodeError). Дополнительную информацию об обработке ошибок кодеков см. в разделе Базовые классы кодеков.

codecs.decode(obj, encoding='utf-8', errors='strict')

Декодирует obj с помощью зарегистрированного кодека для encoding.

Errors можно указать для настройки желаемой схемы обработки ошибок. По умолчанию используется обработчик ошибок 'strict', означающий, что ошибки декодирования вызывают ValueError (или подкласс, специфичный для кодека, например, UnicodeDecodeError). Дополнительную информацию об обработке ошибок кодеков см. в разделе Базовые классы кодеков.

Полные детали каждого кодека также можно посмотреть напрямую:

codecs.lookup(encoding)

Ищет информацию о кодеке в реестре кодеков Python и возвращает объект CodecInfo, как определено ниже.

Кодировки сначала ищутся в кэше реестра. Если не найдены, сканируется список зарегистрированных функций поиска. Если объект CodecInfo не найден, возникает LookupError. В противном случае объект CodecInfo сохраняется в кэше и возвращается вызывающей стороне.

class codecs.CodecInfo(encode, decode, streamreader=None, streamwriter=None, incrementalencoder=None, incrementaldecoder=None, name=None)

Подробности кодека при поиске в реестре кодеков. Аргументы конструктора хранятся в атрибутах с одинаковыми именами:

name

Имя кодировки.

encode
decode

Функции бессостоятельного кодирования и декодирования. Они должны быть функциями или методами, имеющими тот же интерфейс, что и методы encode() и decode() экземпляров Codec (см. Интерфейс кодека). Функции или методы ожидают работы в бессостоятельном режиме.

incrementalencoder
incrementaldecoder

Классы и фабричные функции для инкрементального кодирования и декодирования. Они должны предоставлять интерфейс, определенный базовыми классами IncrementalEncoder и IncrementalDecoder соответственно. Инкрементальные кодеки могут сохранять состояние.

streamwriter
streamreader

Классы и фабричные функции для потокового записи и чтения. Они должны предоставлять интерфейс, определенный базовыми классами StreamWriter и StreamReader соответственно. Потоковые кодеки могут сохранять состояние.

Для упрощения доступа к различным компонентам кодека модуль предоставляет дополнительные вспомогательные функции, которые используют lookup() для поиска кодека:

codecs.getencoder(encoding)

Ищет кодек для заданной кодировки и возвращает его функцию кодирования.

Возвращает LookupError в случае, если кодировка не найдена.

codecs.getdecoder(encoding)

Ищет кодек для заданной кодировки и возвращает его функцию декодирования.

Возвращает LookupError в случае, если кодировка не найдена.

codecs.getincrementalencoder(encoding)

Ищет кодек для заданной кодировки и возвращает его класс или фабричную функцию инкрементального кодировщика.

Возвращает LookupError в случае, если кодировка не найдена или кодек не поддерживает инкрементальный кодировщик.

codecs.getincrementaldecoder(encoding)

Ищет кодек для заданной кодировки и возвращает его класс или фабричную функцию инкрементального декодера.

Возвращает LookupError в случае, если кодировка не найдена или кодек не поддерживает инкрементальный декодер.

codecs.getreader(encoding)

Ищет кодек для заданной кодировки и возвращает его класс StreamReader или фабричную функцию.

Возвращает LookupError в случае, если кодировка не найдена.

codecs.getwriter(encoding)

Ищет кодек для заданной кодировки и возвращает его класс StreamWriter или фабричную функцию.

Возвращает LookupError в случае, если кодировка не найдена.

Пользовательские кодеки становятся доступными путем регистрации соответствующей функции поиска кодеков:

codecs.register(search_function)

Регистрирует функцию поиска кодеков. Функции поиска принимают один аргумент, представляющий имя кодировки строчными буквами с дефисами и пробелами, преобразованными в символы нижнего подчеркивания, и возвращают объект CodecInfo. Если функция поиска не может найти заданную кодировку, она должна вернуть None.

Изменено в версии 3.9: Дефисы и пробелы преобразуются в символы нижнего подчеркивания.

codecs.unregister(search_function)

Дерегистрирует функцию поиска кодеков и очищает кэш реестра. Если функция поиска не зарегистрирована, ничего не происходит.

Введено в версии 3.10.

Хотя встроенная функция open() и связанный модуль io являются рекомендуемым подходом для работы с закодированными текстовыми файлами, этот модуль предоставляет дополнительные утилитарные функции и классы, которые позволяют использовать более широкий спектр кодеков при работе с бинарными файлами:

codecs.open(filename, mode='r', encoding=None, errors='strict', buffering=- 1)

Открытие закодированного файла с заданным режимом и возврат экземпляра StreamReaderWriter, обеспечивающего прозрачное кодирование/декодирование. По умолчанию режим файла равен 'r', что означает открытие файла в режиме чтения.

Примечание

Если кодировка не None, то основанные на кодировании файлы всегда открываются в двоичном режиме. Автоматическое преобразование '\n' при чтении и записи не выполняется. Аргумент режим может быть любым двоичным режимом, приемлемым для встроенной функции open(); 'b' добавляется автоматически.

кодировка определяет кодировку, которая будет использоваться для файла. Допускается любая кодировка, которая кодирует и декодирует байты, а типы данных, поддерживаемые методами файла, зависят от используемого кодека.

ошибки могут быть заданы для определения обработки ошибок. По умолчанию используется 'strict', что приводит к возбуждению ValueError в случае возникновения ошибки кодирования.

буферизация имеет то же значение, что и для встроенной функции open(). По умолчанию используется -1, что означает использование размера буфера по умолчанию.

codecs.EncodedFile(file, data_encoding, file_encoding=None, errors='strict')

Возврат экземпляра StreamRecoder, обернутой версии file, которая предоставляет прозрачную транскодировку. Исходный файл закрывается при закрытии обернутой версии.

Данные, записанные в обернутый файл, декодируются в соответствии с заданной data_encoding и затем записываются в исходный файл в виде байтов с помощью file_encoding. Байты, считанные из исходного файла, декодируются в соответствии с file_encoding, а результат кодируется с помощью data_encoding.

Если file_encoding не указан, он по умолчанию равен data_encoding.

ошибки могут быть заданы для определения обработки ошибок. По умолчанию используется 'strict', что приводит к возбуждению ValueError в случае возникновения ошибки кодирования.

codecs.iterencode(iterator, encoding, errors='strict', **kwargs)

Использует инкрементальный кодировщик для итеративного кодирования входных данных, предоставляемых iterator. Эта функция является генератором. Аргумент ошибки (а также любой другой ключевой аргумент) передаётся инкрементальному кодировщику.

Эта функция требует, чтобы кодек принимал текстовые объекты str для кодирования. Поэтому она не поддерживает кодировщики байты-в-байты, такие как base64_codec.

codecs.iterdecode(iterator, encoding, errors='strict', **kwargs)

Использует инкрементальный декодер для итеративного декодирования входных данных, предоставляемых iterator. Эта функция является генератором. Аргумент ошибки (а также любой другой ключевой аргумент) передаётся инкрементальному декодеру.

Эта функция требует, чтобы кодек принимал объекты bytes для декодирования. Поэтому она не поддерживает кодировщики текст-в-текст, такие как rot_13, хотя rot_13 может быть использовано аналогично с iterencode().

Модуль также предоставляет следующие константы, которые полезны для чтения и записи в платформозависимые файлы:

codecs.BOM
codecs.BOM_BE
codecs.BOM_LE
codecs.BOM_UTF8
codecs.BOM_UTF16
codecs.BOM_UTF16_BE
codecs.BOM_UTF16_LE
codecs.BOM_UTF32
codecs.BOM_UTF32_BE
codecs.BOM_UTF32_LE

Эти константы определяют различные последовательности байтов, являющиеся метками порядка байтов Unicode (BOM) для нескольких кодировок. Они используются в потоках данных UTF-16 и UTF-32 для указания используемого порядка байтов, а в UTF-8 – как подпись Unicode. BOM_UTF16 либо BOM_UTF16_BE, либо BOM_UTF16_LE в зависимости от родного порядка байтов платформы, BOM является псевдонимом для BOM_UTF16, BOM_LE для BOM_UTF16_LE и BOM_BE для BOM_UTF16_BE. Остальные представляют BOM в кодировках UTF-8 и UTF-32.

Базовые классы кодеков

Модуль codecs определяет набор базовых классов, которые задают интерфейсы для работы с объектами кодеков и могут быть использованы в качестве основы для реализации пользовательских кодеков.

Каждый кодек должен определить четыре интерфейса, чтобы быть применимым в качестве кодека в Python: бессостоятельный кодировщик, бессостоятельный декодер, потоковый читатель и потоковый писатель. Потоковый читатель и писатели обычно повторно используют бессостоятельного кодировщика/декодера для реализации протоколов файлов. Авторы кодеков также должны определить, как кодек будет обрабатывать ошибки кодирования и декодирования.

Обработчики ошибок

Для упрощения и стандартизации обработки ошибок кодеки могут реализовывать различные схемы обработки ошибок, принимая строковый аргумент errors:

>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace')
b'German \\xdf, \\u266c'
>>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace')
b'German ß, ♬'

Следующие обработчики ошибок могут использоваться со всеми кодеками стандартных кодировок Python Стандартные кодировки:

Значение

Значение

'strict'

Вызвать UnicodeError (или подкласс), это значение по умолчанию. Реализовано в strict_errors().

'ignore'

Проигнорировать некорректные данные и продолжить без дальнейших уведомлений. Реализовано в ignore_errors().

'replace'

Заменить маркером замены. При кодировании использовать ? (символ ASCII). При декодировании использовать � (U+FFFD, официальный СИМВОЛ ЗАМЕНЫ). Реализовано в replace_errors().

'backslashreplace'

Заменить обратными слешами, которые ссылаются на последовательности. При кодировании использовать шестнадцатеричную форму кодового значения Юникода в формате \xhh \uxxxx \Uxxxxxxxx. При декодировании использовать шестнадцатеричную форму значения байта в формате \xhh. Реализовано в backslashreplace_errors().

'surrogateescape'

При декодировании заменить байт отдельным суррогатным кодом, изменяющимся от U+DC80 до U+DCFF. Этот код затем будет преобразован обратно в тот же байт, когда используется обработчик ошибок 'surrogateescape' при кодировании данных. (См. PEP 383 для получения дополнительной информации.)

Следующие обработчики ошибок применимы только к кодированию (внутри кодировок текста):

Значение

Значение

'xmlcharrefreplace'

Заменить числовым указателем символа XML/HTML, который представляет собой десятичную форму кодового значения Юникода в формате &#num;. Реализовано в xmlcharrefreplace_errors().

'namereplace'

Заменить \N{...} последовательностью обратных ссылок, что указано в фигурных скобках, является свойством имени из базы данных символов Юникода. Реализовано в namereplace_errors().

Кроме того, следующий обработчик ошибок специфичен для заданных кодеков:

Значение

Кодеки

Значение

'surrogatepass'

utf-8, utf-16, utf-32, utf-16-be, utf-16-le, utf-32-be, utf-32-le

Разрешить кодирование и декодирование суррогатного кодового значения (U+D800 - U+DFFF) как обычного кодового значения. В противном случае эти кодеки рассматривают наличие суррогатного кодового значения в str как ошибку.

Добавлено в версии 3.1: Обработчики ошибок 'surrogateescape' и 'surrogatepass'.

Изменено в версии 3.4: Обработчик ошибок 'surrogatepass' теперь работает с кодеками utf-16* и utf-32*.

Добавлено в версии 3.5: Обработчик ошибок 'namereplace'.

Изменено в версии 3.5: Обработчик ошибок 'backslashreplace' теперь работает с декодированием и преобразованием.

Набор разрешенных значений может быть расширен путем регистрации нового обработчика ошибок с именем:

codecs.register_error(name, error_handler)

Зарегистрировать функцию обработки ошибок error_handler под именем name. Функция error_handler будет вызываться во время кодирования и декодирования в случае ошибки, когда name задан в качестве параметра errors.

При кодировании функция error_handler будет вызываться с экземпляром UnicodeEncodeError, который содержит информацию о местоположении ошибки. Обработчик ошибок должен либо вызвать эту, либо другую ошибку, или вернуть кортеж с заменой для некодируемой части входных данных и позиции, где кодирование должно продолжаться. Замена может быть либо str, либо bytes. Если замена представляет собой байты, кодировщик просто скопирует их в буфер вывода. Если замена представляет собой строку, кодировщик закодирует замену. Кодирование продолжается на исходных входных данных в указанной позиции. Отрицательные значения позиции будут рассматриваться как относительные к концу входной строки. Если полученная позиция выходит за границы, будет вызвана ошибка IndexError.

Декодирование и преобразование работают аналогично, за исключением того, что обработчику будут переданы UnicodeDecodeError или UnicodeTranslateError, и замена из обработчика ошибок будет помещена в вывод напрямую.

Ранее зарегистрированные обработчики ошибок (включая стандартные обработчики ошибок) могут быть найдены по имени:

codecs.lookup_error(name)

Возвращает обработчик ошибок, ранее зарегистрированный под именем name.

Возбуждает LookupError в случае, если обработчик не найден.

Следующие стандартные обработчики ошибок также доступны как функции уровня модуля:

codecs.strict_errors(exception)

Реализует обработку ошибок 'strict'.

Каждая ошибка кодирования или декодирования вызывает UnicodeError.

codecs.ignore_errors(exception)

Реализует обработку ошибок 'ignore'.

Некорректные данные игнорируются; кодирование или декодирование продолжаются без дальнейших уведомлений.

codecs.replace_errors(exception)

Реализует обработку ошибок 'replace'.

Заменяет ? (символ ASCII) при ошибках кодирования или � (U+FFFD, официальный СИМВОЛ ЗАМЕНЫ) при ошибках декодирования.

codecs.backslashreplace_errors(exception)

Реализует обработку ошибок 'backslashreplace'.

Некорректные данные заменяются обратной слешей, которая ссылается на последовательность. При кодировании использовать шестнадцатеричную форму кодового значения Юникода в формате \xhh \uxxxx \Uxxxxxxxx. При декодировании использовать шестнадцатеричную форму значения байта в формате \xhh.

Изменено в версии 3.5: Работает с декодированием и преобразованием.

codecs.xmlcharrefreplace_errors(exception)

Реализует обработку ошибок 'xmlcharrefreplace' (только для кодирования в кодировке текста).

Некодируемый символ заменяется соответствующей числовой ссылкой XML/HTML, которая представляет собой десятичную форму кодового значения Юникода в формате &#num; .

codecs.namereplace_errors(exception)

Реализует обработку ошибок 'namereplace' (только для кодирования в кодировке текста).

Некодируемый символ заменяется на \N{...} последовательность обратных ссылок. Множество символов, которые появляются в фигурных скобках, представляет собой свойство имени из базы данных символов Юникода. Например, немецкая строчная буква 'ß' будет преобразована в последовательность байтов \N{LATIN SMALL LETTER SHARP S} .

Добавлено в версии 3.5.

Бессостоятельные кодирование и декодирование

Базовый Codec класс определяет эти методы, которые также определяют интерфейсы функций бессостоятельного кодировщика и декодировщика:

Codec.encode(input, errors='strict')

Кодирует объект input и возвращает кортеж (объект output, длина потреблённых данных). Например, кодирование текста преобразует строковый объект в байтовый объект, используя кодировку набора символов (например, cp1252 или iso-8859-1).

Аргумент errors определяет обработку ошибок. По умолчанию используется обработка 'strict'.

Метод не должен хранить состояние в экземпляре Codec. Используйте StreamWriter для кодеков, которым необходимо хранить состояние для повышения эффективности кодирования.

Кодировщик должен уметь обрабатывать входной объект нулевой длины и возвращать пустой объект типа выходного объекта в такой ситуации.

Codec.decode(input, errors='strict')

Декодирует объект input и возвращает кортеж (объект output, длина потреблённых данных). Например, для кодирования текста декодирование преобразует байтовый объект, закодированный с помощью определённой кодировки набора символов, в строковый объект.

Для кодировок текста и кодеков байты-в-байты input должен быть байтовым объектом или объектом, предоставляющим интерфейс чтения только для чтения буфера – например, объекты буфера и файлы с отображением памяти.

Аргумент errors определяет обработку ошибок. По умолчанию используется обработка 'strict'.

Метод не должен хранить состояние в экземпляре Codec. Используйте StreamReader для кодеков, которым необходимо хранить состояние для повышения эффективности декодирования.

Декодер должен уметь обрабатывать входной объект нулевой длины и возвращать пустой объект типа выходного объекта в такой ситуации.

Инкрементное кодирование и декодирование

Классы IncrementalEncoder и IncrementalDecoder предоставляют базовый интерфейс для инкрементного кодирования и декодирования. Кодирование/декодирование входных данных выполняется не с помощью одного вызова функции бессостоятельного кодировщика/декодировщика, а с помощью нескольких вызовов метода encode()/decode() инкрементного кодировщика/декодировщика. Инкрементный кодировщик/декодировщик отслеживает процесс кодирования/декодирования во время вызовов методов.

Объединённый результат вызовов метода encode()/decode() эквивалентен тому, как если бы все отдельные входные данные были объединены в один, и этот вход был закодирован/декодирован с помощью бессостоятельного кодировщика/декодировщика.

Объекты IncrementalEncoder

Класс IncrementalEncoder используется для кодирования входных данных в несколько шагов. Он определяет следующие методы, которые каждый инкрементный кодировщик должен определить для совместимости с реестром кодеков Python.

class codecs.IncrementalEncoder(errors='strict')

Конструктор экземпляра IncrementalEncoder.

Все инкрементные кодировщики должны предоставить этот интерфейс конструктора. Они могут добавлять дополнительные ключевые аргументы, но только те, которые определены здесь, используются реестром кодеков Python.

Класс IncrementalEncoder может реализовывать различные схемы обработки ошибок, предоставляя ключевой аргумент errors. См. Обработчики ошибок для возможных значений.

Аргумент errors будет присвоен атрибуту с таким же именем. Присвоение этому атрибуту позволяет переключаться между различными стратегиями обработки ошибок в течение жизненного цикла объекта IncrementalEncoder.

encode(object, final=False)

Кодирует object (учитывая текущее состояние кодировщика) и возвращает закодированный объект. Если это последний вызов encode(), final должно быть true (по умолчанию false).

reset()

Сбрасывает кодировщик в исходное состояние. Вывод отбрасывается: вызовите .encode(object, final=True), передав пустую байтовую или текстовую строку при необходимости, чтобы сбросить кодировщик и получить вывод.

getstate()

Возвращает текущее состояние кодировщика, которое должно быть целым числом. Реализация должна гарантировать, что 0 является наиболее распространённым состоянием. (Состояния, более сложные, чем целые числа, можно преобразовать в целое число, используя сериализацию/сохранение состояния и кодирование байтов полученной строки в целое число.)

setstate(state)

Устанавливает состояние кодировщика в state. state должно быть состоянием кодировщика, возвращённым методом getstate().

Объекты IncrementalDecoder

Класс IncrementalDecoder используется для декодирования входных данных в несколько шагов. Он определяет следующие методы, которые каждый инкрементный декодер должен определить для совместимости с реестром кодеков Python.

class codecs.IncrementalDecoder(errors='strict')

Конструктор экземпляра IncrementalDecoder.

Все инкрементные декодеры должны предоставить этот интерфейс конструктора. Они могут добавлять дополнительные ключевые аргументы, но только те, которые определены здесь, используются реестром кодеков Python.

Класс IncrementalDecoder может реализовывать различные схемы обработки ошибок, предоставляя ключевой аргумент errors. См. Обработчики ошибок для возможных значений.

Аргумент errors будет присвоен атрибуту с таким же именем. Присвоение этому атрибуту позволяет переключаться между различными стратегиями обработки ошибок в течение жизненного цикла объекта IncrementalDecoder.

decode(object, final=False)

Декодирует object (учитывая текущее состояние декодера) и возвращает декодированный объект. Если это последний вызов decode(), final должно быть true (по умолчанию false). Если final равно true, декодер должен полностью декодировать входные данные и сбросить все буферы. Если это невозможно (например, из-за неполных байтовых последовательностей в конце входных данных), он должен инициировать обработку ошибок, как и в бессостоятельном случае (что может вызвать исключение).

reset()

Сбрасывает декодер в исходное состояние.

getstate()

Возвращает текущее состояние декодера. Это должен быть кортеж с двумя элементами: первый – буфер с ещё не декодированными входными данными, второй – целое число и дополнительная информация о состоянии. (Реализация должна гарантировать, что 0 – наиболее распространённая дополнительная информация о состоянии.) Если эта дополнительная информация о состоянии – 0, то должно быть возможно установить декодер в состояние без буферизованных входных данных и с 0 в качестве дополнительной информации о состоянии, чтобы подача ранее буферизованных входных данных в декодер возвращала его в предыдущее состояние без генерации любого вывода. (Дополнительную информацию о состоянии, более сложную, чем целые числа, можно преобразовать в целое число, используя сериализацию/сохранение информации и кодирование байтов полученной строки в целое число.)

setstate(state)

Устанавливает состояние декодера в state. state должен быть состоянием декодера, возвращённым методом getstate().

Кодирование и декодирование потоков

Классы StreamWriter и StreamReader предоставляют общие интерфейсы работы, которые можно использовать для очень лёгкой реализации новых подмодулей кодирования. См. encodings.utf_8 для примера того, как это делается.

Объекты StreamWriter

Класс StreamWriter является подклассом Codec и определяет следующие методы, которые должен определить каждый объект записи потока, чтобы он был совместим с реестром кодеков Python.

class codecs.StreamWriter(stream, errors='strict')

Конструктор экземпляра StreamWriter.

Все объекты записи потоков должны предоставить этот интерфейс конструктора. Они могут добавлять дополнительные ключевые аргументы, но только те, что определены здесь, используются реестром кодеков Python.

Аргумент stream должен быть объектом, похожим на файл, открытым для записи текстовых или двоичных данных, как это соответствует конкретному кодеку.

Объект StreamWriter может реализовать различные схемы обработки ошибок, предоставив ключевой аргумент errors. См. Обработчики ошибок для стандартных обработчиков ошибок, которые может поддерживать кодек базового потока.

Аргумент errors будет назначен атрибуту с таким же именем. Назначение этому атрибуту позволит переключаться между различными стратегиями обработки ошибок в течение срока службы объекта StreamWriter.

write(object)

Записывает содержимое объекта, закодированное в поток.

writelines(list)

Записывает объединенную итерацию строк в поток (возможно, повторно используя метод write()). Бесконечные или очень большие итерации не поддерживаются. Стандартные кодеки байты-в-байты не поддерживают этот метод.

reset()

Сбрасывает буферы кодека, используемые для хранения внутреннего состояния.

Вызов этого метода должен гарантировать, что данные на выходе находятся в чистом состоянии, которое позволяет добавлять новые свежие данные без необходимости повторного сканирования всего потока для восстановления состояния.

В дополнение к вышеперечисленным методам, StreamWriter также должен унаследовать все другие методы и атрибуты из базового потока.

Объекты StreamReader

Класс StreamReader является подклассом Codec и определяет следующие методы, которые должен определить каждый объект чтения потока, чтобы он был совместим с реестром кодеков Python.

class codecs.StreamReader(stream, errors='strict')

Конструктор экземпляра StreamReader.

Все объекты чтения потоков должны предоставить этот интерфейс конструктора. Они могут добавлять дополнительные ключевые аргументы, но только те, что определены здесь, используются реестром кодеков Python.

Аргумент stream должен быть объектом, похожим на файл, открытым для чтения текстовых или двоичных данных, как это соответствует конкретному кодеку.

Объект StreamReader может реализовать различные схемы обработки ошибок, предоставив ключевой аргумент errors. См. Обработчики ошибок для стандартных обработчиков ошибок, которые может поддерживать кодек базового потока.

Аргумент errors будет назначен атрибуту с таким же именем. Назначение этому атрибуту позволит переключаться между различными стратегиями обработки ошибок в течение срока службы объекта StreamReader объекта.

Множество допустимых значений для аргумента errors можно расширить с помощью register_error().

read(size=- 1, chars=- 1, firstline=False)

Декодирует данные из потока и возвращает результирующий объект.

Аргумент chars указывает количество декодированных кодовых точек или байтов, которые нужно вернуть. Метод read() никогда не вернёт больше данных, чем запрошено, но он может вернуть меньше, если их недостаточно.

Аргумент size указывает приблизительное максимальное количество закодированных байтов или кодовых точек для чтения при декодировании. Декодер может изменить это значение по мере необходимости. Значение по умолчанию -1 указывает на чтение и декодирование максимально возможного объёма. Этот параметр предназначен для предотвращения декодирования огромных файлов за один шаг.

Флаг firstline указывает, что достаточно будет вернуть только первую строку, если есть ошибки декодирования в последующих строках.

Метод должен использовать жадную стратегию чтения, что означает, что он должен читать столько данных, сколько разрешено в соответствии с определением кодировки и заданным размером, например, если необязательные кодировочные окончания или маркеры состояния доступны в потоке, они также должны быть прочитаны.

readline(size=None, keepends=True)

Читает одну строку из входного потока и возвращает декодированные данные.

size, если задан, передаётся в качестве аргумента size методу read() потока.

Если keepends равен false, окончания строк будут удалены из возвращаемых строк.

readlines(sizehint=None, keepends=True)

Читает все доступные строки из входного потока и возвращает их в виде списка строк.

Окончания строк реализуются с помощью метода кодека decode() и включаются в записи списка, если keepends имеет значение true.

sizehint, если задан, передаётся в качестве аргумента size методу read() потока.

reset()

Сбрасывает буферы кодека, используемые для хранения внутреннего состояния.

Обратите внимание, что никакого перемещения потока не должно происходить. Этот метод в первую очередь предназначен для возможности восстановления после ошибок декодирования.

В дополнение к вышеперечисленным методам, StreamReader также должен унаследовать все другие методы и атрибуты из базового потока.

Объекты StreamReaderWriter

Класс StreamReaderWriter — это вспомогательный класс, который позволяет обернуть потоки, работающие в режимах чтения и записи.

Конструкции такие, что можно использовать функции-фабрики, возвращаемые функцией lookup(), для создания экземпляра.

class codecs.StreamReaderWriter(stream, Reader, Writer, errors='strict')

Создаёт экземпляр StreamReaderWriter. stream должен быть объектом, похожим на файл. Reader и Writer должны быть функциями-фабриками или классами, предоставляющими интерфейсы StreamReader и StreamWriter соответственно. Обработка ошибок выполняется так же, как определено для объектов чтения и записи потоков.

Экземпляры StreamReaderWriter определяют объединённые интерфейсы классов StreamReader и StreamWriter. Они наследуют все остальные методы и атрибуты из базового потока.

Объекты StreamRecoder

Класс StreamRecoder преобразует данные из одного кодирования в другое, что иногда бывает полезно при работе с различными кодировочными средами.

Конструктор позволяет использовать фабричные функции, возвращаемые функцией lookup(), для создания экземпляра.

class codecs.StreamRecoder(stream, encode, decode, Reader, Writer, errors='strict')

Создает экземпляр StreamRecoder, который реализует двустороннее преобразование: методы encode и decode работают на переднем плане — с данными, видимыми кодом, вызывающим read() и write(), а методы Reader и Writer работают на заднем плане — с данными в потоке stream.

Эти объекты можно использовать для прозрачной транскодировки, например, из кодировки Latin-1 в UTF-8 и обратно.

Аргумент stream должен быть объектом, похожим на файл.

Аргументы encode и decode должны соответствовать интерфейсу Codec. Reader и Writer должны быть фабричными функциями или классами, предоставляющими объекты интерфейса StreamReader и StreamWriter соответственно.

Обработка ошибок выполняется так же, как определено для читателей и писателей потоков.

Экземпляры StreamRecoder определяют объединённый интерфейс классов StreamReader и StreamWriter. Они наследуют все остальные методы и атрибуты от базового потока.

Обзор кодировок и Unicode

Строки хранятся в виде последовательности кодовых точек в диапазоне U+0000–U+10FFFF. (См. PEP 393 для получения более подробной информации об реализации.) После использования объекта строки вне области ЦП и памяти возникает проблема с порядком байтов и способом хранения этих массивов в виде байтов. Как и в других кодеках, сериализация строки в последовательность байтов известна как кодирование, а восстановление строки из последовательности байтов — как декодирование. Существует множество различных кодеков для сериализации текста, которые коллективно называются кодировками текста.

Самая простая кодировка текста (называемая 'latin-1' или 'iso-8859-1') отображает кодовые точки от 0 до 255 в байты 0x0–0xff, что означает, что строковый объект, содержащий кодовые точки выше U+00FF, не может быть закодирован с помощью этого кодека. В этом случае будет возбуждено исключение UnicodeEncodeError, которое будет выглядеть следующим образом (хотя подробности сообщения об ошибке могут отличаться): UnicodeEncodeError: 'latin-1' codec can't encode character '\u1234' in position 3: ordinal not in range(256).

Существует еще одна группа кодировок (так называемые кодировки charmap), которые выбирают другой подмножество всех кодовых точек Unicode и то, как эти кодовые точки отображаются в байты 0x0–0xff. Чтобы увидеть, как это делается, просто откройте, например, encodings/cp1252.py (кодировка, которая используется в основном в Windows). Существует строковая константа с 256 символами, показывающая, какой символ сопоставлен с каким значением байта.

Все эти кодировки могут кодировать только 256 из 1114112 кодовых точек, определённых в Unicode. Простой и прямой способ хранения каждой кодовой точки Unicode — хранить каждую кодовую точку как четыре последовательных байта. Существует два варианта: хранить байты в прямом или обратном порядке байтов. Эти две кодировки называются UTF-32-BE и UTF-32-LE соответственно. Их недостатком является то, что, например, при использовании UTF-32-BE на машине с обратным порядком байтов, вам всегда придётся переставлять байты при кодировании и декодировании. UTF-32 избегает этой проблемы: байты всегда будут в естественном порядке байтов. Однако, если эти байты будут считываться процессором с другим порядком байтов, то байты нужно будет переставить. Для определения порядка байтов последовательности байтов UTF-16 или UTF-32 используется так называемый BOM («Byte Order Mark»). Это символ Unicode U+FEFF. Этот символ может быть добавлен в начало любой последовательности байтов UTF-16 или UTF-32. Переставленный по байтам вариант этого символа (0xFFFE) — это недопустимый символ, который может не встречаться в тексте Unicode. Поэтому, когда первый символ в последовательности байтов UTF-16 или UTF-32 оказывается U+FFFE, байты нужно переставить при декодировании. К сожалению, символ U+FEFF использовался и для другой цели как ZERO WIDTH NO-BREAK SPACE: символ, у которого нет ширины и не позволяющий разрывать слово. Его можно, например, использовать для подсказок алгоритму лигатур. С Unicode 4.0 использование U+FEFF как ZERO WIDTH NO-BREAK SPACE было устаревшим (с U+2060 (WORD JOINER) взявшим на себя эту роль). Тем не менее, программное обеспечение Unicode по-прежнему должно уметь обрабатывать U+FEFF в обеих ролях: в качестве BOM это устройство для определения структуры хранения закодированных байтов и исчезает после декодирования последовательности байтов в строку; как ZERO WIDTH NO-BREAK SPACE это обычный символ, который будет декодирован как любой другой.

Существует еще одна кодировка, способная кодировать весь диапазон символов Unicode: UTF-8. UTF-8 — это 8-битная кодировка, что означает, что проблем с порядком байтов в UTF-8 нет. Каждый байт в последовательности байтов UTF-8 состоит из двух частей: маркеров (самые старшие биты) и полезных битов. Маркеры — это последовательность от нуля до четырёх 1 битов, за которыми следует 0 бит. Символы Unicode кодируются следующим образом (x — это полезные биты, которые, когда конкатенированы, дают символ Unicode):

Диапазон

Кодировка

U-00000000 … U-0000007F

0xxxxxxx

U-00000080 … U-000007FF

110xxxxx 10xxxxxx

U-00000800 … U-0000FFFF

1110xxxx 10xxxxxx 10xxxxxx

U-00010000 … U-0010FFFF

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Самый младший бит символа Unicode — это самый правый бит x.

Поскольку UTF-8 — это 8-битная кодировка, BOM не требуется, и любой U+FEFF символ в декодированной строке (даже если это первый символ) обрабатывается как ZERO WIDTH NO-BREAK SPACE.

Без внешней информации невозможно надёжно определить, какая кодировка использовалась для кодирования строки. Каждая кодировка charmap может декодировать любую случайную последовательность байтов. Однако это невозможно с UTF-8, так как последовательности байтов UTF-8 имеют структуру, не допускающую произвольных последовательностей байтов. Для повышения надёжности распознавания кодировки UTF-8 Microsoft придумала вариант UTF-8 (который Python называет "utf-8-sig") для своей программы «Блокнот»: перед записью любого символа Unicode в файл записывается закодированный в UTF-8 BOM (в виде последовательности байтов: 0xef, 0xbb, 0xbf). Поскольку маловероятно, что любой файл, закодированный в charmap, начнётся с этих значений байтов (которые, например, отображались бы в iso-8859-1), это повышает вероятность того, что кодировка utf-8-sig будет правильно угадана из последовательности байтов. Поэтому здесь BOM не используется, чтобы определить порядок байтов, использованный для генерации последовательности байтов, а как подпись, которая помогает угадать кодировку. При кодировании кодек utf-8-sig запишет 0xef, 0xbb, 0xbf в качестве первых трёх байтов в файл. При декодировании utf-8-sig пропустит эти три байта, если они появятся в качестве первых трёх байтов в файле. В UTF-8 использование BOM не рекомендуется и, как правило, следует избегать.

Стандартные кодировки

Python имеет встроенный ряд кодеков, реализованных либо как C-функции, либо с помощью словарей в качестве таблиц отображения. В следующей таблице перечислены кодеки по имени, вместе с несколькими общими псевдонимами и языками, для которых кодировка, скорее всего, используется. Ни список псевдонимов, ни список языков не претендует на исчерпываемость. Обратите внимание, что альтернативы написания, которые отличаются только регистром или использованием тире вместо нижнего подчёркивания, также являются допустимыми псевдонимами; поэтому, например, 'utf-8' является допустимым псевдонимом для кодека 'utf_8'.

Деталь реализации CPython: Некоторые распространённые кодировки могут обойти механизм поиска кодеков для повышения производительности. Эти возможности оптимизации распознаются CPython только для ограниченного набора (регистронезависимых) псевдонимов: utf-8, utf8, latin-1, latin1, iso-8859-1, iso8859-1, mbcs (только для Windows), ascii, us-ascii, utf-16, utf16, utf-32, utf32, и аналогичные с использованием подчёркиваний вместо тире. Использование альтернативных псевдонимов для этих кодировок может привести к замедлению выполнения.

Изменено в версии 3.6: Возможность оптимизации распознана для us-ascii.

Многие из наборов символов поддерживают одни и те же языки. Они различаются по отдельным символам (например, поддерживается ли символ EURO SIGN или нет), а также по назначению символов кодовым позициям. В частности, для европейских языков обычно существуют следующие варианты:

  • кодировка ISO 8859
  • код страницы Microsoft Windows, как правило, полученная от кодировки 8859, но заменяющая управляющие символы дополнительными графическими символами
  • код страницы IBM EBCDIC
  • код страницы IBM PC, совместимая с ASCII

Кодек

Псевдонимы

Языки

ascii

646, us-ascii

Английский

big5

big5-tw, csbig5

Традиционный китайский

big5hkscs

big5-hkscs, hkscs

Традиционный китайский

cp037

IBM037, IBM039

Английский

cp273

273, IBM273, csIBM273

Немецкий

В версии 3.4.

cp424

EBCDIC-CP-HE, IBM424

Иврит

cp437

437, IBM437

Английский

cp500

EBCDIC-CP-BE, EBCDIC-CP-CH, IBM500

Западная Европа

cp720

Арабский

cp737

Греческий

cp775

IBM775

Балтийские языки

cp850

850, IBM850

Западная Европа

cp852

852, IBM852

Центральная и Восточная Европа

cp855

855, IBM855

Болгарский, Белорусский, Македонский, Русский, Сербский

cp856

Иврит

cp857

857, IBM857

Турецкий

cp858

858, IBM858

Западная Европа

cp860

860, IBM860

Португальский

cp861

861, CP-IS, IBM861

Исландский

cp862

862, IBM862

Иврит

cp863

863, IBM863

Канадский

cp864

IBM864

Арабский

cp865

865, IBM865

Датский, Норвежский

cp866

866, IBM866

Русский

cp869

869, CP-GR, IBM869

Греческий

cp874

Тайский

cp875

Греческий

cp932

932, ms932, mskanji, ms-kanji

Японский

cp949

949, ms949, uhc

Корейский

cp950

950, ms950

Традиционный китайский

cp1006

Урду

cp1026

ibm1026

Турецкий

cp1125

1125, ibm1125, cp866u, ruscii

Украинский

В версии 3.4.

cp1140

ibm1140

Западная Европа

cp1250

windows-1250

Центральная и Восточная Европа

cp1251

windows-1251

Болгарский, Белорусский, Македонский, Русский, Сербский

cp1252

windows-1252

Западная Европа

cp1253

windows-1253

Греческий

cp1254

windows-1254

Турецкий

cp1255

windows-1255

Иврит

cp1256

windows-1256

Арабский

cp1257

windows-1257

Балтийские языки

cp1258

windows-1258

Вьетнамский

euc_jp

eucjp, ujis, u-jis

Японский

euc_jis_2004

jisx0213, eucjis2004

Японский

euc_jisx0213

eucjisx0213

Японский

euc_kr

euckr, korean, ksc5601, ks_c-5601, ks_c-5601-1987, ksx1001, ks_x-1001

Корейский

gb2312

chinese, csiso58gb231280, euc-cn, euccn, eucgb2312-cn, gb2312-1980, gb2312-80, iso-ir-58

Упрощенный китайский

gbk

936, cp936, ms936

Объединенный китайский

gb18030

gb18030-2000

Объединенный китайский

hz

hzgb, hz-gb, hz-gb-2312

Упрощенный китайский

iso2022_jp

csiso2022jp, iso2022jp, iso-2022-jp

Японский

iso2022_jp_1

iso2022jp-1, iso-2022-jp-1

Японский

iso2022_jp_2

iso2022jp-2, iso-2022-jp-2

Японский, Корейский, Упрощенный китайский, Западная Европа, Греческий

iso2022_jp_2004

iso2022jp-2004, iso-2022-jp-2004

Японский

iso2022_jp_3

iso2022jp-3, iso-2022-jp-3

Японский

iso2022_jp_ext

iso2022jp-ext, iso-2022-jp-ext

Японский

iso2022_kr

csiso2022kr, iso2022kr, iso-2022-kr

Корейский

latin_1

iso-8859-1, iso8859-1, 8859, cp819, latin, latin1, L1

Западная Европа

iso8859_2

iso-8859-2, latin2, L2

Центральная и Восточная Европа

iso8859_3

iso-8859-3, latin3, L3

Эсперанто, Мальтийский

iso8859_4

iso-8859-4, latin4, L4

Балтийские языки

iso8859_5

iso-8859-5, cyrillic

Болгарский, Белорусский, Македонский, Русский, Сербский

iso8859_6

iso-8859-6, arabic

Арабский

iso8859_7

iso-8859-7, greek, greek8

Греческий

iso8859_8

iso-8859-8, hebrew

Иврит

iso8859_9

iso-8859-9, latin5, L5

Турецкий

iso8859_10

iso-8859-10, latin6, L6

Языки Северной Европы

iso8859_11

iso-8859-11, thai

Тайские языки

iso8859_13

iso-8859-13, latin7, L7

Балтийские языки

iso8859_14

iso-8859-14, latin8, L8

Келтские языки

iso8859_15

iso-8859-15, latin9, L9

Западная Европа

iso8859_16

iso-8859-16, latin10, L10

Юго-Восточная Европа

johab

cp1361, ms1361

Корейский

koi8_r

Русский

koi8_t

Таджикский

В версии 3.5.

koi8_u

Украинский

kz1048

kz_1048, strk1048_2002, rk1048

Казахский

В версии 3.5.

mac_cyrillic

maccyrillic

Болгарский, Белорусский, Македонский, Русский, Сербский

mac_greek

macgreek

Греческий

mac_iceland

maciceland

Исландский

mac_latin2

maclatin2, maccentraleurope, mac_centeuro

Центральная и Восточная Европа

mac_roman

macroman, macintosh

Западная Европа

mac_turkish

macturkish

Турецкий

ptcp154

csptcp154, pt154, cp154, cyrillic-asian

Казахский

shift_jis

csshiftjis, shiftjis, sjis, s_jis

Японский

shift_jis_2004

shiftjis2004, sjis_2004, sjis2004

Японский

shift_jisx0213

shiftjisx0213, sjisx0213, s_jisx0213

Японский

utf_32

U32, utf32

все языки

utf_32_be

UTF-32BE

все языки

utf_32_le

UTF-32LE

все языки

utf_16

U16, utf16

все языки

utf_16_be

UTF-16BE

все языки

utf_16_le

UTF-16LE

все языки

utf_7

U7, unicode-1-1-utf-7

все языки

utf_8

U8, UTF, utf8, cp65001

все языки

utf_8_sig

все языки

Изменено в версии 3.4: Кодировщики utf-16* и utf-32* больше не допускают кодирования суррогатных кодовых точек (U+D800–U+DFFF). Декодеры utf-32* больше не декодируют последовательности байтов, соответствующие суррогатным кодовым точкам.

Изменено в версии 3.8: cp65001 теперь является псевдонимом для utf_8.

Утилиты кодирования, специфичные для Python

Несколько предопределённых кодеков специфичны для Python, поэтому их имена кодеков не имеют смысла вне Python. Эти кодеки перечислены в таблицах ниже в зависимости от ожидаемых типов входных и выходных данных (обратите внимание, что, хотя текстовые кодировки являются наиболее распространённым случаем использования кодеков, подлежащая кодировочная инфраструктура поддерживает произвольные преобразования данных, а не только текстовые кодировки). Для асимметричных кодеков указанный смысл описывает направление кодирования.

Текстовые кодировки

Следующие кодеки обеспечивают кодирование str в bytes и декодирование объекта-подобного байтам в str, подобно кодировкам Unicode текста.

Кодек

Псевдонимы

Значение

idna

Реализует RFC 3490, см. также encodings.idna. Поддерживается только errors='strict'.

mbcs

ansi, dbcs

Только Windows: закодировать операнд в соответствии с кодовой страницей ANSI (CP_ACP).

oem

Только Windows: закодировать операнд в соответствии с кодовой страницей OEM (CP_OEMCP).

Введено в версии 3.6.

palmos

Кодирование PalmOS 3.5.

punycode

Реализует RFC 3492. Состоятельные кодеки не поддерживаются.

raw_unicode_escape

Кодировка Latin-1 с \uXXXX и \UXXXXXXXX для других кодовых точек. Существующие обратные слэши не экранируются. Используется в протоколе Python pickle.

undefined

Вызвать исключение для всех преобразований, даже для пустых строк. Обработчик ошибок игнорируется.

unicode_escape

Кодировка, подходящая в качестве содержимого литерала Unicode в коде Python, закодированном в ASCII, за исключением того, что кавычки не экранируются. Декодирование из исходного кода Latin-1. Обратите внимание, что Python исходный код по умолчанию использует UTF-8.

Изменено в версии 3.8: Кодек «unicode_internal» удалён.

Бинарные преобразования

Следующие кодеки обеспечивают бинарные преобразования: отображения объекта-подобного байтам в bytes. Они не поддерживаются bytes.decode() (который генерирует только str вывод).

Кодек

Псевдонимы

Значение

Кодировщик/Декодировщик

base64_codec 1

base64, base_64

Преобразовать операнд в многострочный MIME base64 (результат всегда включает конечный '\n').

Изменено в версии 3.4: принимает любой объект-подобный байтам в качестве входных данных для кодирования и декодирования

base64.encodebytes() / base64.decodebytes()

bz2_codec

bz2

Сжать операнд с помощью bz2.

bz2.compress() / bz2.decompress()

hex_codec

hex

Преобразовать операнд в шестнадцатеричное представление, с двумя цифрами на байт.

binascii.b2a_hex() / binascii.a2b_hex()

quopri_codec

quopri, quotedprintable, quoted_printable

Преобразовать операнд в MIME quoted printable.

quopri.encode() с quotetabs=True / quopri.decode()

uu_codec

uu

Преобразовать операнд с помощью uuencode.

uu.encode() / uu.decode()

zlib_codec

zip, zlib

Сжать операнд с помощью gzip.

zlib.compress() / zlib.decompress()

1

В дополнение к объектам-подобным байтам, 'base64_codec' также принимает ASCII-только экземпляры str для декодирования

Введено в версии 3.2: Восстановление бинарных преобразований.

Изменено в версии 3.4: Восстановление псевдонимов для бинарных преобразований.

Текстовые преобразования

Следующий кодек предоставляет текстовое преобразование: отображение str в str. Он не поддерживается str.encode() (который генерирует только bytes вывод).

Кодек

Псевдонимы

Значение

rot_13

rot13

Возвращает шифрование Цезаря для операнда.

Введено в версии 3.2: Восстановление текстового преобразования rot_13.

Изменено в версии 3.4: Восстановление псевдонима rot13.

END_OF_DOCUMENT_MARKER

encodings.idna — Международные имена доменных имён в приложениях

Этот модуль реализует RFC 3490 (Международные имена доменных имён в приложениях) и RFC 3492 (Nameprep: Профиль Stringprep для международных доменных имён (IDN)). Он основан на кодировке punycode и stringprep.

Если вам нужна спецификация IDNA 2008 из RFC 5891 и RFC 5895, используйте сторонний модуль idna.

Эти RFC вместе определяют протокол для поддержки символов, отличных от ASCII, в именах доменных имён. Имя доменного имени, содержащее символы, отличные от ASCII (например, www.Alliancefrançaise.nu), преобразуется в кодировку, совместимую с ASCII (ACE, например, www.xn--alliancefranaise-npb.nu). Форма ACE имени доменного имени затем используется во всех местах, где произвольные символы не допускаются протоколом, например, в запросах DNS, полях HTTP Host и так далее. Это преобразование выполняется в приложении; по возможности, незаметно для пользователя: приложение должно прозрачно преобразовывать метки доменных имён Юникода в IDNA в сети и преобразовывать метки ACE обратно в Юникод перед представлением их пользователю.

Python поддерживает это преобразование несколькими способами: кодек idna выполняет преобразование между Юникодом и ACE, разбивая входную строку на метки на основе разделителей, определённых в разделе 3.1 RFC 3490, и преобразует каждую метку в ACE по мере необходимости, а также разбивает входную строку байтов на метки на основе . разделителя и преобразует найденные метки ACE в Юникод. Кроме того, модуль socket прозрачно преобразует имена хостов Юникода в ACE, так что приложениям не нужно беспокоиться о преобразовании имён хостов при передаче их модулю socket. Кроме того, модули, имеющие имена хостов в качестве параметров функций, такие как http.client и ftplib, принимают имена хостов Юникода (http.client затем также прозрачно отправляет имя хоста IDNA в поле Host, если отправляет это поле вообще).

При получении имён хостов из сети (например, при обратном поиске имён) автоматическое преобразование в Юникод не выполняется: приложения, желающие представить такие имена хостов пользователю, должны декодировать их в Юникод.

Модуль encodings.idna также реализует процедуру nameprep, которая выполняет определённые нормализации имён хостов для обеспечения регистронезависимости международных доменных имён и объединения похожих символов. Функции nameprep можно использовать непосредственно, если это необходимо.

encodings.idna.nameprep(label)

Возвращает версию label, обработанную nameprep. В настоящее время реализация предполагает строки запроса, поэтому AllowUnassigned равно true.

encodings.idna.ToASCII(label)

Преобразует метку в ASCII, как указано в RFC 3490. Предполагается, что UseSTD3ASCIIRules равно false.

encodings.idna.ToUnicode(label)

Преобразует метку в Юникод, как указано в RFC 3490.

encodings.mbcs — Кодировка Windows ANSI

Этот модуль реализует кодировку ANSI (CP_ACP).

Доступность: Только Windows.

Изменено в версии 3.3: Поддержка любого обработчика ошибок.

Изменено в версии 3.2: До версии 3.2 аргумент errors игнорировался; 'replace' всегда использовался для кодирования, а 'ignore' — для декодирования.

encodings.utf_8_sig — UTF-8 кодировка с подписью BOM

Этот модуль реализует вариант кодировки UTF-8. При кодировании перед кодированными байтами UTF-8 будет добавлен BOM, закодированный в UTF-8. Для состоятельного кодера это делается только один раз (при первом записи в поток байтов). При декодировании необязательный BOM, закодированный в UTF-8, в начале данных будет пропущен.

© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/library/codecs.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API