Encoding utf 8 python что это

Работаем с текстами на Python: кодировки, нормализация, чистка

Зачем эта статья?

Об обработке текстов на естественном языке сейчас знают все. Все хоть раз пробовали задавать вопрос Сири или Алисе, пользовались Grammarly (это не реклама), пробовали генераторы стихов, текстов. или просто вводили запрос в Google. Да, вот так просто. На самом деле Google понимает, что вы от него хотите, благодаря штукам, которые умеют обрабатывать и анализировать естественную речь в вашем запросе.

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

Вы можете заметить, что если ввести в поисковую строку запрос с символами с ударением (так называемый модифицирующий акут), к примеру «ó», поисковая система может показать результаты, содержащие слова из вашего запроса, символы с ударением уже выглядят как обычные символы.

Обратите внимание на следующий запрос:

Encoding utf 8 python что это. Смотреть фото Encoding utf 8 python что это. Смотреть картинку Encoding utf 8 python что это. Картинка про Encoding utf 8 python что это. Фото Encoding utf 8 python что это

Запрос содержит символ с модифицирующим акутом, однако во втором результате мы можем заметить, что выделено найденное слово из запроса, только вот оно не содержит вышеупомянутый символ, просто букву «о».

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

Откуда взялась статья?

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

Важная ремарка: я не являюсь специалистом в области обработки текстов. Изложенный материал является результатом исключительно любительского изучения.

Проблема чтения файлов

Допустим, у нас есть файл с текстом. Нам нужно этот текст прочитать. Казалось бы, пиши себе такой вот скрипт для чтения из файла да и радуйся:

В файле содержится вот такое вот изречение:

что переводится с испанского как питон. Однако консоль OC Windows 10 покажет нам немного другой результат:

Сейчас мы разберёмся, что именно пошло не так и по какой причине.

Кодировка

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

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

Посмотрим на результат:

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

Ошибки, связанные с кодировками

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

Попытка выполнения вот такого кода (в файле всё ещё содержится испанский питон):

даст нам следующий результат:

Обозначение

Суть

Значение по умолчанию. Несоотвествующие кодировке символы возбуждают исключения UnicodeError и наследуемые от него.

Несоответсвующие символы пропускаются без возбуждения исключений.

Только для метода encode :

Несоответствующие символы заменяются на соответсвующие значения XML.

Несоответствующие символы заменяются на определённые последовательности с обратным слэшем.

Несоответствующие символы заменяются на имена этих символов, которые берутся из базы данных Unicode.

Приведём пример использования таких обработчиков:

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

Cворачивание регистра

И по классике приведём пример:

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

Нормализация

Чтобы обозначить важность нормализации, приведём простой пример:

Внешне два этих символа выглядят абсолютно одинаково. Однако если мы попытаемся вывести имена этих символов, как их видит интерпретатор Python’a, результат нас порядком удивит.

В Python есть отличный встроенный модуль, который содержит данные о символах Unicode, их имена, являются ли они цифрамии и т.п. (методы по типу str.isdigit() берут информацию из этих данных). Воспользуемся данным модулем, чтобы вывести имена символов, исходя из информации, которая содержится в базе данных Unicode.

Результат выполнения данного кода:

Итак, интерпретатор Python’a видит эти символы как два разных, но в стандарте Unicode они имеют одинаковое отображение.Такие символы называют каноническими эквивалентами. Приложения будут считать два этих символа одинаковыми, но не интерпретатор.

Посмотрим на ещё один пример:

Данные символы также будут являться каноническими эквивалентами. Из примера мы видим, что символ «é» в стандарте Unicodeможет быть представлен двумя способами, которые к тому же имеют разную длину. Символ «é» может быть представлен одним или двумя байтами.

Источник

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

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

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

codecs. encode ( obj, encoding=’utf-8′, errors=’strict’ ) ¶

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

codecs. decode ( obj, encoding=’utf-8′, errors=’strict’ ) ¶

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

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

codecs. lookup ( encoding ) ¶

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

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

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

Классы записи и чтения потоков или функции фабрики. Они должны обеспечивать интерфейс, определенный базовыми классами 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 ) ¶

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

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

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

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

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

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

Если file_encoding не указан, по умолчанию используется data_encoding.

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

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

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

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 ¶

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

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

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

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

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

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

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

ЗначениеКодекиЗначение
‘surrogatepass’utf-8, utf-16, utf-32, utf-16-be, utf-16-le, utf-32-be, utf-32-leРазрешить кодирование и декодирование суррогатных кодов. Эти кодеки обычно рассматривают присутствие суррогатов как ошибку.

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

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

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

codecs. register_error ( name, error_handler ) ¶

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

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

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

codecs. lookup_error ( name ) ¶

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

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

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

codecs. strict_errors ( exception ) ¶

codecs. replace_errors ( exception ) ¶

Реализует обработку ошибок ‘replace’ (только для текстовых кодировок ): заменяет ‘?’ для ошибок кодирования (кодируется кодеком) и ‘\ufffd’ (символ замены Юникод) для ошибок декодирования.

codecs. ignore_errors ( exception ) ¶

Реализует обработку ошибок ‘ignore’ : искаженные данные игнорируются, а кодирование или декодирование продолжается без дальнейшего уведомления.

codecs. xmlcharrefreplace_errors ( exception ) ¶

Реализует обработку ошибок ‘xmlcharrefreplace’ (только для кодирования с текстовыми кодировками ): некодируемый символ заменяется соответствующей ссылкой на XML символ.

codecs. backslashreplace_errors ( exception ) ¶

Реализует обработку ошибок ‘backslashreplace’ (только для текстовых кодировок ): искаженные данные заменяются escape-последовательностью с обратной косой чертой.

codecs. namereplace_errors ( exception ) ¶

Реализует обработку ошибок ‘namereplace’ (только для кодирования с текстовыми кодировками ): некодируемый символ заменяется escape-последовательностью \N <. >.

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

Кодирование и декодирование без сохранения состояния¶

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

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

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

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

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

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

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

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

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

Объекты IncrementalEncoder¶

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

class codecs. IncrementalEncoder ( errors=’strict’ ) ¶

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

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

Объекты IncrementalDecoder¶

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

class codecs. IncrementalDecoder ( errors=’strict’ ) ¶

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

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

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

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

Объекты StreamWriter¶

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

class codecs. StreamWriter ( stream, errors=’strict’ ) ¶

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

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

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

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

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

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

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

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

Объекты StreamReader¶

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

class codecs. StreamReader ( stream, errors=’strict’ ) ¶

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

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

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

Декодирует данные из потока и возвращает получившийся объект.

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

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

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

Прочтать одну строку из входного потока и вернуть декодированные данные.

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

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

Прочитать все строки, доступные во входном потоке, и вернуть их в виде списка строк.

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

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

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

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

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

Объекты StreamReaderWriter¶

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

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

Объекты StreamRecoder¶

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

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

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

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

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

Кодировки и Юникод¶

ДиапазонКодировка
U-00000000 … U-0000007F0xxxxxxx
U-00000080 … U-000007FF110xxxxx 10xxxxxx
U-00000800 … U-0000FFFF1110xxxx 10xxxxxx 10xxxxxx
U-00010000 … U-0010FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Наименьший значащий бит символа Юникода — это крайний правый бит x.

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

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

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

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

cp424EBCDIC-CP-HE, IBM424Ивритcp437437, IBM437Английскийcp500EBCDIC-CP-BE, EBCDIC-CP-CH, IBM500Западноевропейскийcp720Арабскийcp737Греческийcp775IBM775Балтийские языкиcp850850, IBM850Западноевропейскийcp852852, IBM852Центральная и Восточная Европаcp855855, IBM855Болгарский, Белорусский, Македонский, Русский, Сербскийcp856Ивритcp857857, IBM857Турецкийcp858858, IBM858Западноевропейскийcp860860, IBM860Португальскийcp861861, CP-IS, IBM861Исландскийcp862862, IBM862Ивритcp863863, IBM863Канадскийcp864IBM864Арабскийcp865865, IBM865Датский, Норвежскийcp866866, IBM866Русскийcp869869, CP-GR, IBM869Греческийcp874Тайскийcp875Греческийcp932932, ms932, mskanji, ms-kanjiЯпонскийcp949949, ms949, uhcКорейскийcp950950, ms950Традиционный китайскийcp1006Урдуcp1026ibm1026Турецкийcp11251125, ibm1125, cp866u, ruscii

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

cp1140ibm1140Западноевропейскийcp1250windows-1250Центральная и Восточная Европаcp1251windows-1251Болгарский, Белорусский, Македонский, Русский, Сербскийcp1252windows-1252Западноевропейскийcp1253windows-1253Греческийcp1254windows-1254Турецкийcp1255windows-1255Ивритcp1256windows-1256Арабскийcp1257windows-1257Балтийские языкиcp1258windows-1258Вьетнамскийeuc_jpeucjp, ujis, u-jisЯпонскийeuc_jis_2004jisx0213, eucjis2004Японскийeuc_jisx0213eucjisx0213Японскийeuc_kreuckr, korean, ksc5601, ks_c-5601, ks_c-5601-1987, ksx1001, ks_x-1001Корейскийgb2312chinese, csiso58gb231280, euc-cn, euccn, eucgb2312-cn, gb2312-1980, gb2312-80, iso-ir-58Упрощенный китайскийgbk936, cp936, ms936Единый китайскийgb18030gb18030-2000Единый китайскийhzhzgb, hz-gb, hz-gb-2312Упрощенный китайскийiso2022_jpcsiso2022jp, iso2022jp, iso-2022-jpЯпонскийiso2022_jp_1iso2022jp-1, iso-2022-jp-1Японскийiso2022_jp_2iso2022jp-2, iso-2022-jp-2Японский, Корейский, Упрощенный китайский, Западноевропейский, Греческийiso2022_jp_2004iso2022jp-2004, iso-2022-jp-2004Японскийiso2022_jp_3iso2022jp-3, iso-2022-jp-3Японскийiso2022_jp_extiso2022jp-ext, iso-2022-jp-extЯпонскийiso2022_krcsiso2022kr, iso2022kr, iso-2022-krКорейскийlatin_1iso-8859-1, iso8859-1, 8859, cp819, latin, latin1, L1Западноевропейскийiso8859_2iso-8859-2, latin2, L2Центральная и Восточная Европаiso8859_3iso-8859-3, latin3, L3Эсперанто, Мальтийскийiso8859_4iso-8859-4, latin4, L4Балтийские языкиiso8859_5iso-8859-5, cyrillicБолгарский, Белорусский, Македонский, Русский, Сербскийiso8859_6iso-8859-6, arabicАрабскийiso8859_7iso-8859-7, greek, greek8Греческийiso8859_8iso-8859-8, hebrewИвритiso8859_9iso-8859-9, latin5, L5Турецкийiso8859_10iso-8859-10, latin6, L6Скандинавские языкиiso8859_11iso-8859-11, thaiТайские языкиiso8859_13iso-8859-13, latin7, L7Балтийские языкиiso8859_14iso-8859-14, latin8, L8Кельтские языкиiso8859_15iso-8859-15, latin9, L9Западноевропейскийiso8859_16iso-8859-16, latin10, L10Юго-Восточная Европаjohabcp1361, ms1361Корейскийkoi8_rРусскийkoi8_t

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

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

mac_cyrillicmaccyrillicБолгарский, Белорусский, Македонский, Русский, Сербскийmac_greekmacgreekГреческийmac_icelandmacicelandИсландскийmac_latin2maclatin2, maccentraleuropeЦентральная и Восточная Европаmac_romanmacroman, macintoshЗападноевропейскийmac_turkishmacturkishТурецкийptcp154csptcp154, pt154, cp154, cyrillic-asianКазахскийshift_jiscsshiftjis, shiftjis, sjis, s_jisЯпонскийshift_jis_2004shiftjis2004, sjis_2004, sjis2004Японскийshift_jisx0213shiftjisx0213, sjisx0213, s_jisx0213Японскийutf_32U32, utf32все языкиutf_32_beUTF-32BEвсе языкиutf_32_leUTF-32LEвсе языкиutf_16U16, utf16все языкиutf_16_beUTF-16BEвсе языкиutf_16_leUTF-16LEвсе языкиutf_7U7, unicode-1-1-utf-7все языкиutf_8U8, UTF, utf8, cp65001все языкиutf_8_sigвсе языки

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

Специальные кодировки Python¶

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

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

Только для 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Кодировка подходит в качестве содержимого Юникод литерала в кодированном ASCII исходном коде Python, за исключением того, что кавычки не экранируются. Декодирование исходного кода с Latin-1. Будьте осторожны, т. к. исходный код Python фактически использует UTF-8 по умолчанию.

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

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

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

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

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

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

КодекАлиасыЗначениеКодер / Декодер
base64_codec [1]base64, base_64
КодекАлиасыЗначение
rot_13rot13Возвращает шифр Цезаря из операнда.

encodings.idna — интернационализованные доменные имена в приложениях¶

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

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

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

encodings.idna. nameprep ( label ) ¶

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

encodings.idna. ToASCII ( label ) ¶

Преобразовать метку в ASCII, как указано в RFC 3490. UseSTD3ASCIIRules считается ложным.

encodings.idna. ToUnicode ( label ) ¶

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

encodings.mbcs — Кодовая страница Windows ANSI¶

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

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

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

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *