Spec-Zone.ru › Python 3.13

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', что означает открытие файла в режиме чтения.

Примечание

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

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

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

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

Изменено в версии 3.11: Режим 'U' удален.

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

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

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

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

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

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

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

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

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

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

Эта функция требует, чтобы кодек принимал объекты 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'

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

'surrogateescape'

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

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

Значение

Значение

'xmlcharrefreplace'

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

'namereplace'

Заменить \N{...} последовательностью эскейпов. В фигурных скобках указано свойство Name из базы данных Unicode Character. Реализовано в 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'.

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

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

codecs.xmlcharrefreplace_errors(exception)

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

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

codecs.namereplace_errors(exception)

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

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

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

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

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

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

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

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

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

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

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 ложно, окончания строк будут удалены из возвращаемых строк.

readlines(sizehint=None, keepends=True)

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

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

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 является хранение каждой кодовой точки в виде четырех последовательных байтов. Есть два варианта: хранить байты в порядке big endian или little endian. Эти две кодировки называются UTF-32-BE и UTF-32-LE соответственно. Их недостаток заключается в том, что если, например, вы используете UTF-32-BE на машине с порядком байтов little endian, вам всегда нужно будет менять байты при кодировании и декодировании. 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, windows-31j

Японский

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.

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.

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 и так далее. Это преобразование выполняется в приложении; по возможности, незаметно для пользователя: Приложение должно прозрачно преобразовывать метки доменных имён Unicode в IDNA в сети и преобразовывать метки ACE обратно в Unicode перед представлением их пользователю.

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

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

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

encodings.idna.nameprep(label)

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

encodings.idna.ToASCII(label)

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

encodings.idna.ToUnicode(label)

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

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

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

Доступность: Windows.

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

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

encodings.utf_8_sig — Кодировка UTF-8 с сигнатурой BOM

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

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

Spec-Zone.ru

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