Python – это один из наиболее популярных в 21 веке языков. Он применяется в самых разных областях: от веб-программирования до создания сложных систем управления оборудованием.
В процессе разработки программного обеспечения приходится много работать со строками, а также символами, использовать кодировки. На первых порах данный процесс может показаться сложным. Представленная далее информация позволит разобраться с The Unicode в Питоне, научит переводить символы в UTF-8.
The Python – высокоуровневый язык, обладающим общим назначением. Он имеет строгую динамическую типизацию, а также автоматическое управление памятью. Ориентирован на производительность программиста, повышение читаемости и качества исходного кода. Обеспечивает высокий уровень переносимости приложений.
The Python – это объектно-ориентированный язык. Перед изучением особенностей кодировки и работы со строками, необходимо понимать, с каким ЯП предстоит иметь дело. Питон интерпретируемый, имеет минималистичный синтаксис ядра.
Используется при:
- веб-разработке;
- создании бизнес-приложений;
- мобильной разработке;
- программировании основных программ для операционных систем (на компьютерах).
В игровой индустрии он выступает в качестве своеобразного дополнения. Небольшие проекты на нем запустить можно, крупные – проблематично из-за особенностей языка.
Преимущества
Прежде чем писать код to the Python, необходимо рассмотреть его преимущества и недостатки. Эта информация пригодится при работе со строками и кодировкой.
К преимуществам относят:
- простой и понятный синтаксис;
- высокую читаемость исходного программного кода;
- большое количество встроенных инструментов;
- хорошую поддержку масштабируемости;
- дружелюбное сообщество – получить помощь по вопросам разработки удается очень быстро;
- внушительную коллекцию дополнений;
- интерпретируемость.
The Python с легкостью осваивается новичками в области разработки программного обеспечения. У него есть собственная система оповещения об ошибках, благодаря которой удается отлаживать the program. Найти место, в котором возник сбой, а также понять, почему поведение приложения некорректное, не составляет никакого труда.
Недостатки
The programming – процесс, успех которого во многом зависит от выбранного языка разработки. У Питона выделяются следующие недостатки:
- нерациональное распределение памяти устройства – потребляется больше положенного;
- медлительность – особо заметно на примере крупных проектов;
- строгую привязку к системным библиотекам.
Несмотря на свои недостатки, the Python ложится в основу to серверной части программного обеспечения. Им пользуются крупных компании вроде Google и Pinterest.
Терминология для разработчика
Изучать любой ЯП нужно, зная the terms в программировании. Вот ключевые понятия, помогающие разобраться в программном коде быстрее:
- Алгоритм – последовательность команд или их набор, предназначенные для выполнения задачи/достижения определенной цели.
- API – интерфейс прикладного программирования. Представлен правилами, процедурами и протоколами для создания приложений. Способствует более простой коммуникации to иными программами и службами.
- Аргумент – значение, передаваемое to the функцию.
- Символ – простейшая единица информации в коде. Выражается буквенной записью или одним символьным значением.
- Объект – связь переменных, а также констант и иных структур данных, которые могут быть выбраны и обработаны совместно.
- Класс – связанные объекты с общими свойствами. Обеспечивают гибкость разработки.
- Константа – значение, которое никогда не меняется. Оно сохраняется единым в процессе выполнения исходного кода.
- Тип данных – классификация информации определенного типа.
- Массив – список или группа схожих типов значений, сгруппированные заранее.
- Исключение – непредвиденное, аномальное поведение в процессе the working program.
- Фреймворк – готовый блок кода, используемый for the helping programmer. Используется разработчиком для решения схожих задач.
- Петля (цикл) – инструкции, которые повторяют одно и то же действие несколько раз. Происходит это до тех пор, пока условие не будет выполнено. Также возможно получение команды to stop.
- Итерация – один проход через данный набор операций/инструкций.
- Ключевое слово – слово или выражение, зарезервированное the language. Используются ключевые слова для обеспечения определенных функций, операций, алгоритмов.
- Оператор – the term, указываемый to the object, который умеет управлять различными операндами.
- Операнд – объект, которым удается манипулировать посредством специальных операторов.
- Переменная – именованная область для хранения the information в исходном коде. Простейшее место в памяти устройства, названное именем.
- Указатель – переменная, содержащая конкретный адрес in the memory. Своеобразное местоположение.
Все это – основная терминология, без запоминания и понимания которой изучение the Python и других ЯП станет проблематичным.
Unicode – это…
Unicode – стандарт кодирования символов. Он включает в себя практически все мировые письменные языки. Сейчас особо распространен в интернете. Он был заложен в 1991 году.
Состоит их двух частей:
- универсального символьного набора;
- семейства кодировок (UTF).
Универсальный символьный набор предоставляет to Unicode допустимые по стандарту символы, присваивает каждому из низ неотрицательное число. Соответствующие значения чаще всего записываются в шестнадцатеричной форме с префиксом U+. Семейство кодировок необходимо для определения способов преобразования кодов символов с целью последующей передачи в поток или to files.
Здесь стоит запомнить следующие особенности:
- в рамках стандарта предусматриваются более 138 000 различных символов;
- каждый символ обладает названием и кодом (так называемым номером);
- все коды включают в себя латинские буквы и шестнадцатеричные цифры.
В Unicode символы представлены кодовыми точками – целыми числами в диапазоне от 0 до 0x10FFF. Символы на экране выражаются при помощи глифов. Пример – для прописной «А» глиф – это два диагональных штриха и один горизонтальный. Детали напрямую зависят от используемого шрифта.
При работе с Питоном беспокоиться за определение правильного глифа не нужно – графический пользовательский интерфейс отлично справляется с этой задачей.
Кодировка
Unicode строка – это последовательность символов (кодовых точек), представляющих собой цифры и буквы (числовые значения от 0 to 0x10FFF). Она представляет в памяти устройства в виде набора кодовых единиц, которые отображаются в байты. Unicode использует для хранения символа 8-бит.
Кодировка – это преобразование строки Unicode to bytes (в байты). В Python используется UTF-8. Далее предстоит разобраться с ее особенностями, а также с непосредственным переводом in codes.
ASCII
ASCII (American standard code for information interchange) – это специальная таблица (кодировка, набор), включающая в себя распространенные печатные и непечатные символы. В ней происходит сопоставление записям их числовой интерпретации. ASCII появилась в 1963 году.
Данная таблица необходима для определения кодов символов:
- управляющих элементов;
- десятичных цифр;
- латинского и национальных алфавитов;
- знаков препинания.
Знать о работе ASCII нужно всем, кто в Python 3 планирует заниматься кодировкой. Данный элемент позволяет грамотно отображать на дисплее те или иные записи.
UTF-8 – определение
UTF-8 – наиболее используемая кодировка при разработке программного обеспечения в the Python. Это – формат преобразования Unicode. В соответствующей записи «8» указывает на то, что при кодировании применяются только 8-битные значения. Связано это с наличием кодировок UTF-16, а также UTF-32, которые используются в программировании реже.
При работе с UTF-8 необходимо запомнить следующие правила:
- если используемая кодовая точка меньше 128, она будет представлена соответствующим байтовым значением;
- если кодовая точка больше 128, происходит ее преобразование to последовательности двух, трех или четырех байтов, где каждый байт располагается между 128 и 255.
UTF-8 обладает следующими полезными свойствами:
- можно с ее помощью обработать любую кодовую точку Unicode;
- строка Unicode после преобразования может быть обработана функциями C, а также отправляться через протоколы;
- строчка текста ASCII – это допустимый текст UTF-8;
- компактность;
- при повреждении или утрате байтов поддерживается определение начала следующей кодовой точки с повторной синхронизацией.
UTF-8 представляет собой байтовую кодировку. Она указывает на то, что символ будет представлен определенной последовательностью из одного или нескольких байтов. За счет такой концепции удается избежать проблем с порядков следования.
Что нужно помнить перед кодировкой
Кодирование информации – процесс, требующий осторожности. Неграмотная реализация приводит или к ошибкам, или к некорректному отображению информации на экране, поэтому программисту необходимо запомнить следующее:
- Если происходит кодирование to bytes при помощи UTF-8, то перекодировать соответствующую строку из байт потребуется через эту же кодировку. Некоторые кодировки совместимы, но обычно их совместное применение приводит к утрате данных.
- При написании кодов рекомендуется использование Unicode. Это оптимальный вариант to UTF-8 из-за применения «по умолчанию» в основной массе функций и методов.
- Декодирование байтов строки лучше осуществлять после их получения, кодирование – непосредственно перед отправкой.
В программном коде рекомендуется работать с «обычными» типами данных – строками, числами и списками. Это связано с тем, что большая часть методов в Питоне не поддерживает использование байтовых строк, либо функционируют так, что предсказать вероятное поведение проблематично.
Строки и методы
В the Python 3 все символы, а также документы будут автоматически переводиться в UTF-8. Это позволяет свести вероятность некорректного отображения к нулю. Но в данной версии языка есть специальные строковые методы. Они не теряют своей актуальности. Связано это с тем, что программист сможет указывать разные необходимые кодировки to application.
Модуль string – это наиболее простой и удобный инструмент, разделяющий символы ASCII на группы с последующим преобразованием в строки-константы. Строки можно создавать при помощи метода decode из bytes.
Перед углубленным изучением имеющихся методов необходимо запомнить следующее:
- тип str в the Python 3.0 включает в себя символы Unicode;
- можно включить символ Юникода to строковый литерал за счет кодировки по умолчанию в виде UTF-8;
- допускается использование Unicode-символов в идентификаторах;
- если не получается ввести определенный символ или хочется сохранить его только в формате ASCII, допускается использование escape-последовательностей в строковых литералах.
Кодирование задается в виде строк, содержащих имена кодировок. Односимвольные Unicode-строки могут быть созданы через встроенную функцию chr. Она принимает целые числа, а затем возвращает to Unicode string = 1, содержащую соответствующую кодовую точку. Обратная функция – это ord. Она принимает строку Юникода и возвращает значение кодовой точки.
Основные методы
В the Python множество методов, поддерживающих работу с кодированием информации. Таблица ниже поможет ознакомиться с наиболее популярными из них:
НазваниеХарактеристикаDecode и incodeМетоды, отвечающие за кодирование и декодирование строки в нужном формате.ASCIIФункция, которая приводит string to ASCII.Chr, ordВзаимообратные операции. Первая демонстрирует Unicode-символ соответствующий to введенному числовому значению. Вторая вернет числовой аналог конкретной символьной записи.Hex, bin, int, octФункции, позволяющие переводить числа to различные системы счисления.BytesРаботает так же, как и метод encode. Отличается расширенными возможностями.StrПеревод байтовых строк в обычные с использованием указанной ранее кодировки.UnicodedataМодуль, умеющий работать с базами данных всех Unicode-элементов.
Особое внимание уделим encode и decode, а также изучим несколько наглядных примеров каждого предложенного в таблице метода.
Encode
Метод Encode() используется for the входных строк. Они имеются у каждого объекта. Позволяют закодировать информацию to заданный «формат».
Форма представления метода: input_string.encode (encoding, errors).
Соответствующая запись будет обрабатывать input.string при помощи encoding. Здесь errors отвечает за поведение, согласно которому необходимо действовать при невыполнении кодирования. Encode() приводит to byte-последовательности.
Результатом станет объект <class ‘bytes’>.
Тип кодирования, которому необходимо следовать при работе с кодом, задается при помощи параметра encoding.
Результат обработки приведет to следующий результат:
Здесь входная строка была закодирована to UTF-8. Она имеет префикс b, указывающий на преобразование в поток байтов. Это сделано для удобства считывания.
Обработка ошибок
Обработка ошибок при работе с кодированием информации в Python – важный аспект, которому новички не уделяют должного внимания. Отвечает за поведение приложения при неудачном преобразовании имеющихся данных. За этот момент в the Python отвечает параметр errors.
Тип ошибкиКак действоватьStrictПараметр по умолчанию. Он вызывает UnicodeDecodeError.IgnoreИгнорирование некодированного Юникода.ReplaceНеобходим для того, чтобы изменить все некодируемые символы. Они будут приведены к вопросительному знаку (?)BackslashreplaceОтвечает за вставку to escape-последовательность обратной собой черты. Она появляется вместо некодируемых элементов in the Unicode.
Выше – таблица с наиболее распространенными значениями error. А вот элементарный пример кода. Он поможет изучить принципы работы с encode. Здесь во входной строке не все символы кодируются:
После обработки заданного кода на экране отобразится результат, показанный выше. Здесь предстоит перевести string to SCII с игнорированием некодируемого компонента.
При возникновении ошибки кодирования интерпретатор выведет на экран один из вариантов:
- UnicodeError – общее исключение;
- UnicodeDecodeError – появляется тогда, когда в кодировке отсутствует обрабатываемая кодовая позиция;
- UnicodeEncodeError – исключение, возникающее, когда обрабатываемый символ является незнакомым для заданной кодировки.
Все это поможет лучше усвоить работу encode и decode to the Python.
Декодирование
Для декодирования байтового потока in the Python используется функция decode(). Она работает по аналогии с encode, но в обратном порядке.
Формат записи: .
Этот фрагмент кода наглядно показывает принцип функционирования decode() в Питоне:
При обработке соответствующего запроса произойдет вывод на дисплей следующей записи:
Параметр decoding отвечает за определение типа кодирования, из которого производится декодирование байтовой последовательности. Параметр errors указывает на поведение при сбоях. Здесь используются те же методы, что и в encode.
Литералы в строках Python
Использование конструктора str() – не единственный вариант использования текстовых данных в программном коде. Иногда объект соответствующего типа вводится напрямую:
В приложении, написанном на Питоне, при помощи Unicode можно напечатать символы, отсутствующие на клавиатуре. Они копируются и вставляются непосредственно в оболочку интерпретатора.
Выше – наглядный пример того, как это выглядит в коде. Один литерал может быть записан при помощи Unicode в the Python несколькими способами: сочетаниями клавиш или прямым вводом необходимого элемента в нужном месте.
Выше – таблица, показывающая все способы задания символьных записей через экранирующие последовательности.
Наглядные примеры
Ранее было сказано о методах работы со строками в Python. Далее будут рассмотрены примеры для каждого случая.
Это – способ перевода заданного текстового значения str to ASCII. Экранирование русского слова связывается с отсутствием для него стандартного знакового набора в ASCII. У него нет 1-байтового представления.
А вот – метод bytes. Он будет преобразовывать в одноименный объект не только строки и числа, но и последовательности числовых знаний. В них каждый элемент – это тот или иной символ.
Это – наглядный пример использования встроенного модуля Unicodedata. Он позволяет уточнить имя любого Юникод-символа, а затем отобразить его по имени.
Регулярные выражения
Регулярные выражения, которые поддерживаются модулем re, могут быть приведены to bytes или strings. Часть последовательностей специальных символов (\d или \w) обладают разными значениями. Они меняются в зависимости от формы представления шаблона – байтами или строками. Пример – \d соответствует категории символов в диапазоне от 0 to 9 включительно, но в строках – любому символьному значению, находящемуся в пределах категории Nd.
Выше – пример работы с числом 57. Оно будет записано арабскими и тайскими цифрами. При запуске \d+ сопоставит тайские цифры и выведет их на печать. Если ранее был указан флаг re.ASCII для compile(), \d+ получит соответствие подстроке «57».
С основами кодирования разобраться удалось. Этот видео-урок поможет новичкам быстрее разобраться в соответствующей теме. Теперь изучим несколько принципов работы со строками в Питоне, которые могут пригодиться разработчику.
Сворачивание регистра
Сворачивание регистра – способ унификации текста в любой форме представления к каноничной. Пример – приведение всей строки to нижний регистр. Над текстов будут проведены некоторые дополнительные преобразования. В Python 3.3 есть метод str.casefold, который помогает работать со сворачиванием регистра. Если обрабатываемый текст содержит исключительно символы из кодировки latin1, результат его применения окажется точно таким же, как и в случае с str.lower().
Здесь метод не просто привес текст к нижнему регистру, но и использовал преобразование для специфического символа из немецкого алфавита.
Нормализация
Нормализация – приведение имеющегося текста к единому представлению на дисплее устройства.
Внешне данные записи выглядят идентично. Если попытаться перевести имена соответствующих символов подобно интерпретатору the Python, результат окажется нестандартным.
В Питоне имеется встроенный модуль, содержащий сведения о символьных значениях Unicode, их имена, являются ли они цифрами и так далее. Методы по типу str.isdigit будут брать информацию именно из соответствующей «базы». Речь идет о Unicodedata, рассмотренном ранее.
При обработке данного фрагмента произойдет вывод следующего результата:
Здесь интерпретатор рассматривает введенные значения в качестве двух разных, несмотря на их одинаковое графическое отображение to Unicode. Символьные значение подобной формы носят название канонических эквивалентов. Приложения их считывают одинаково, а интерпретаторы – нет.
Нормализация реализована через функцию unicodedata.normalize. Первый аргумент – это форма нормализации. Она определяет, эквивалентны ли две строки Unicode по отношению друг к другу. Всего существуют 4 формы представления:
Здесь каждый вариант изучен более подробно. Алгоритмы нормализации пригодятся при поиске валидных документов или непосредственного индексирования текста.
Как лучше разобраться с кодированием
Кодирование информации, а также работа с Unicode и UTF-8 в Python новичкам кажется сложной задачей, особенно если предстоит использование больших объемов данных. В Сети полно полезных сведений, литературы, уроков и упражнений по рассмотренному в статье направлению. Но разобраться в них бывает достаточно проблематично.
Чтобы encode, decode и другие методы Питона не доставляли хлопот, рекомендуется закончить компьютерные онлайн курсы. Пример – от образовательного центра OTUS. Все занятия здесь проводятся в виде вебинаров, посмотреть их можно в любое время.
Преимущества дистанционных курсов:
- быстрое обучение основам выбранного языка и обучение кодированию информации с нуля;
- сжатые сроки – до 12 месяцев;
- постоянное кураторство опытными специалистами и интересные домашние задания;
- совместимость с обыденной жизнью – такая форма обучения подходит даже при наличии полноценного трудового дня и семьи;
- помощь в формировании портфолио и постоянная практика.
В конце обучения ученики получают не только полезные знания и навыки, но и их документальное подтверждение – электронный сертификат.
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Кодировки в Python и Unicode OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Python – это один из наиболее популярных в 21 веке языков. Он применяется в самых разных областях: от веб-программирования до создания сложных систем управления оборудованием. В процессе разработки программного обеспечения приходится много работать со строками, а также символами, использовать кодировки. На первых порах данный процесс может показаться сложным. Представленная далее информация позволит разобраться с The" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/kodirovki-v-python-i-unicode/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/kodirovki-v-python-i-unicode\/#article","name":"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 Python \u0438 Unicode OTUS","headline":"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 Python \u0438 Unicode","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2023\/02\/oj-1080x720-18-1.jpg","width":2245,"height":1587},"datePublished":"2023-02-05T14:15:35+00:00","dateModified":"2023-02-05T14:24:02+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/kodirovki-v-python-i-unicode\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/kodirovki-v-python-i-unicode\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, Python"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/kodirovki-v-python-i-unicode\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/kodirovki-v-python-i-unicode\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/kodirovki-v-python-i-unicode\/#listItem","position":2,"name":"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 Python \u0438 Unicode","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/kodirovki-v-python-i-unicode\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/kodirovki-v-python-i-unicode\/#webpage","url":"https:\/\/otus.ru\/journal\/kodirovki-v-python-i-unicode\/","name":"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 Python \u0438 Unicode OTUS","description":"Python \u2013 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432 21 \u0432\u0435\u043a\u0435 \u044f\u0437\u044b\u043a\u043e\u0432. \u041e\u043d \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u0445: \u043e\u0442 \u0432\u0435\u0431-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438. \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u0440\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u043c. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0434\u0430\u043b\u0435\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 The","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/kodirovki-v-python-i-unicode\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2023\/02\/oj-1080x720-18-1.jpg","@id":"https:\/\/otus.ru\/journal\/kodirovki-v-python-i-unicode\/#mainImage","width":2245,"height":1587},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/kodirovki-v-python-i-unicode\/#mainImage"},"datePublished":"2023-02-05T14:15:35+00:00","dateModified":"2023-02-05T14:24:02+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/5431" /><link rel='shortlink' href='https://otus.ru/journal/?p=5431' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkodirovki-v-python-i-unicode%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkodirovki-v-python-i-unicode%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-5431 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-5431" class="the-post post-5431 post type-post status-publish format-standard has-post-thumbnail category-polza tag-python">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Кодировки в Python и Unicode
</h1>
<a href="https://otus.ru/journal/kodirovki-v-python-i-unicode/" class="date-link" data-wpel-link="internal"><time class="post-date">5 февраля, 2023</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-18-1.jpg" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Кодировки в Python и Unicode" title="Кодировки в Python и Unicode" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-18-1-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-18-1-270x180.jpg 270w" data-src="https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-18-1-770x515.jpg" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#Python_%E2%80%93_%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8" title="Python – особенности">Python – особенности</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%9F%D1%80%D0%B5%D0%B8%D0%BC%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0" title="Преимущества">Преимущества</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%9D%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8" title="Недостатки">Недостатки</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0" title="Терминология для разработчика">Терминология для разработчика</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-5" href="#Unicode_%E2%80%93_%D1%8D%D1%82%D0%BE%E2%80%A6" title="Unicode – это…">Unicode – это…</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%9A%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0" title="Кодировка">Кодировка</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-7" href="#ASCII" title="ASCII">ASCII</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-8" href="#UTF-8_%E2%80%93_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" title="UTF-8 – определение">UTF-8 – определение</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%A7%D1%82%D0%BE_%D0%BD%D1%83%D0%B6%D0%BD%D0%BE_%D0%BF%D0%BE%D0%BC%D0%BD%D0%B8%D1%82%D1%8C_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%BE%D0%B9" title="Что нужно помнить перед кодировкой">Что нужно помнить перед кодировкой</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%A1%D1%82%D1%80%D0%BE%D0%BA%D0%B8_%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B" title="Строки и методы">Строки и методы</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B" title="Основные методы">Основные методы</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-12" href="#Encode" title="Encode">Encode</a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA" title="Обработка ошибок">Обработка ошибок</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%94%D0%B5%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" title="Декодирование">Декодирование</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-15" href="#%D0%9B%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D0%BB%D1%8B_%D0%B2_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0%D1%85_Python" title="Литералы в строках Python">Литералы в строках Python</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-16" href="#%D0%9D%D0%B0%D0%B3%D0%BB%D1%8F%D0%B4%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B" title="Наглядные примеры">Наглядные примеры</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-17" href="#%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F" title="Регулярные выражения">Регулярные выражения</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-18" href="#%D0%A1%D0%B2%D0%BE%D1%80%D0%B0%D1%87%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0" title="Сворачивание регистра">Сворачивание регистра</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-19" href="#%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" title="Нормализация">Нормализация</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-20" href="#%D0%9A%D0%B0%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5_%D1%80%D0%B0%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D1%8C%D1%81%D1%8F_%D1%81_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC" title="Как лучше разобраться с кодированием">Как лучше разобраться с кодированием</a></li></ul></nav></div>
<p>Python – это один из наиболее популярных в 21 веке языков. Он применяется в самых разных областях: от веб-программирования до создания сложных систем управления оборудованием. </p>
<p>В процессе разработки программного обеспечения приходится много работать со строками, а также символами, использовать кодировки. На первых порах данный процесс может показаться сложным. Представленная далее информация позволит разобраться с The Unicode в Питоне, научит переводить символы в UTF-8.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Python_%E2%80%93_%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8"></span>Python – особенности<span class="ez-toc-section-end"></span></h2>
<p>The Python – высокоуровневый язык, обладающим общим назначением. Он имеет строгую динамическую типизацию, а также автоматическое управление памятью. Ориентирован на производительность программиста, повышение читаемости и качества исходного кода. Обеспечивает высокий уровень переносимости приложений.</p>
<p>The Python – это объектно-ориентированный язык. Перед изучением особенностей кодировки и работы со строками, необходимо понимать, с каким ЯП предстоит иметь дело. Питон интерпретируемый, имеет минималистичный синтаксис ядра.</p>
<p>Используется при:</p>
<ul>
<li>веб-разработке;</li>
<li>создании бизнес-приложений;</li>
<li>мобильной разработке;</li>
<li>программировании основных программ для операционных систем (на компьютерах).</li>
</ul>
<p>В игровой индустрии он выступает в качестве своеобразного дополнения. Небольшие проекты на нем запустить можно, крупные – проблематично из-за особенностей языка.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B5%D0%B8%D0%BC%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0"></span>Преимущества<span class="ez-toc-section-end"></span></h3>
<p>Прежде чем писать код to the Python, необходимо рассмотреть его преимущества и недостатки. Эта информация пригодится при работе со строками и кодировкой.</p>
<p>К преимуществам относят:</p>
<ul>
<li>простой и понятный синтаксис;</li>
<li>высокую читаемость исходного программного кода;</li>
<li>большое количество встроенных инструментов;</li>
<li>хорошую поддержку масштабируемости;</li>
<li>дружелюбное сообщество – получить помощь по вопросам разработки удается очень быстро;</li>
<li>внушительную коллекцию дополнений;</li>
<li>интерпретируемость.</li>
</ul>
<p>The Python с легкостью осваивается новичками в области разработки программного обеспечения. У него есть собственная система оповещения об ошибках, благодаря которой удается отлаживать the program. Найти место, в котором возник сбой, а также понять, почему поведение приложения некорректное, не составляет никакого труда.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8"></span>Недостатки<span class="ez-toc-section-end"></span></h3>
<p>The programming – процесс, успех которого во многом зависит от выбранного языка разработки. У Питона выделяются следующие недостатки:</p>
<ul>
<li>нерациональное распределение памяти устройства – потребляется больше положенного;</li>
<li>медлительность – особо заметно на примере крупных проектов;</li>
<li>строгую привязку к системным библиотекам.</li>
</ul>
<p>Несмотря на свои недостатки, the Python ложится в основу to серверной части программного обеспечения. Им пользуются крупных компании вроде Google и Pinterest.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0"></span>Терминология для разработчика<span class="ez-toc-section-end"></span></h2>
<p>Изучать любой ЯП нужно, зная the terms в программировании. Вот ключевые понятия, помогающие разобраться в программном коде быстрее:</p>
<ol>
<li>Алгоритм – последовательность команд или их набор, предназначенные для выполнения задачи/достижения определенной цели.</li>
<li>API – интерфейс прикладного программирования. Представлен правилами, процедурами и протоколами для создания приложений. Способствует более простой коммуникации to иными программами и службами.</li>
<li>Аргумент – значение, передаваемое to the функцию.</li>
<li>Символ – простейшая единица информации в коде. Выражается буквенной записью или одним символьным значением.</li>
<li>Объект – связь переменных, а также констант и иных структур данных, которые могут быть выбраны и обработаны совместно.</li>
<li>Класс – связанные объекты с общими свойствами. Обеспечивают гибкость разработки.</li>
<li>Константа – значение, которое никогда не меняется. Оно сохраняется единым в процессе выполнения исходного кода.</li>
<li>Тип данных – классификация информации определенного типа.</li>
<li>Массив – список или группа схожих типов значений, сгруппированные заранее.</li>
<li>Исключение – непредвиденное, аномальное поведение в процессе the working program.</li>
<li>Фреймворк – готовый блок кода, используемый for the helping programmer. Используется разработчиком для решения схожих задач.</li>
<li>Петля (цикл) – инструкции, которые повторяют одно и то же действие несколько раз. Происходит это до тех пор, пока условие не будет выполнено. Также возможно получение команды to stop.</li>
<li>Итерация – один проход через данный набор операций/инструкций.</li>
<li>Ключевое слово – слово или выражение, зарезервированное the language. Используются ключевые слова для обеспечения определенных функций, операций, алгоритмов.</li>
<li>Оператор – the term, указываемый to the object, который умеет управлять различными операндами.</li>
<li>Операнд – объект, которым удается манипулировать посредством специальных операторов.</li>
<li>Переменная – именованная область для хранения the information в исходном коде. Простейшее место в памяти устройства, названное именем.</li>
<li>Указатель – переменная, содержащая конкретный адрес in the memory. Своеобразное местоположение.</li>
</ol>
<p>Все это – основная терминология, без запоминания и понимания которой изучение the Python и других ЯП станет проблематичным.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Unicode_%E2%80%93_%D1%8D%D1%82%D0%BE%E2%80%A6"></span>Unicode – это…<span class="ez-toc-section-end"></span></h2>
<p>Unicode – стандарт кодирования символов. Он включает в себя практически все мировые письменные языки. Сейчас особо распространен в интернете. Он был заложен в 1991 году.</p>
<p>Состоит их двух частей:</p>
<ul>
<li>универсального символьного набора;</li>
<li>семейства кодировок (UTF).</li>
</ul>
<p>Универсальный символьный набор предоставляет to Unicode допустимые по стандарту символы, присваивает каждому из низ неотрицательное число. Соответствующие значения чаще всего записываются в шестнадцатеричной форме с префиксом U+. Семейство кодировок необходимо для определения способов преобразования кодов символов с целью последующей передачи в поток или to files.</p>
<p>Здесь стоит запомнить следующие особенности:</p>
<ul>
<li>в рамках стандарта предусматриваются более 138 000 различных символов;</li>
<li>каждый символ обладает названием и кодом (так называемым номером);</li>
<li>все коды включают в себя латинские буквы и шестнадцатеричные цифры.</li>
</ul>
<p>В Unicode символы представлены кодовыми точками – целыми числами в диапазоне от 0 до 0x10FFF. Символы на экране выражаются при помощи глифов. Пример – для прописной «А» глиф – это два диагональных штриха и один горизонтальный. Детали напрямую зависят от используемого шрифта.</p>
<p>При работе с Питоном беспокоиться за определение правильного глифа не нужно – графический пользовательский интерфейс отлично справляется с этой задачей.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0"></span>Кодировка<span class="ez-toc-section-end"></span></h3>
<p>Unicode строка – это последовательность символов (кодовых точек), представляющих собой цифры и буквы (числовые значения от 0 to 0x10FFF). Она представляет в памяти устройства в виде набора кодовых единиц, которые отображаются в байты. Unicode использует для хранения символа 8-бит.</p>
<p>Кодировка – это преобразование строки Unicode to bytes (в байты). В Python используется UTF-8. Далее предстоит разобраться с ее особенностями, а также с непосредственным переводом in codes.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="ASCII"></span>ASCII<span class="ez-toc-section-end"></span></h2>
<p>ASCII (American standard code for information interchange) – это специальная таблица (кодировка, набор), включающая в себя распространенные печатные и непечатные символы. В ней происходит сопоставление записям их числовой интерпретации. ASCII появилась в 1963 году.</p>
<p>Данная таблица необходима для определения кодов символов:</p>
<ul>
<li>управляющих элементов;</li>
<li>десятичных цифр;</li>
<li>латинского и национальных алфавитов;</li>
<li>знаков препинания.</li>
</ul>
<p>Знать о работе ASCII нужно всем, кто в Python 3 планирует заниматься кодировкой. Данный элемент позволяет грамотно отображать на дисплее те или иные записи.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="UTF-8_%E2%80%93_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5"></span>UTF-8 – определение<span class="ez-toc-section-end"></span></h2>
<p>UTF-8 – наиболее используемая кодировка при разработке программного обеспечения в the Python. Это – формат преобразования Unicode. В соответствующей записи «8» указывает на то, что при кодировании применяются только 8-битные значения. Связано это с наличием кодировок UTF-16, а также UTF-32, которые используются в программировании реже.</p>
<p>При работе с UTF-8 необходимо запомнить следующие правила:</p>
<ul>
<li>если используемая кодовая точка меньше 128, она будет представлена соответствующим байтовым значением;</li>
<li>если кодовая точка больше 128, происходит ее преобразование to последовательности двух, трех или четырех байтов, где каждый байт располагается между 128 и 255.</li>
</ul>
<p> UTF-8 обладает следующими полезными свойствами:</p>
<ul>
<li>можно с ее помощью обработать любую кодовую точку Unicode;</li>
<li>строка Unicode после преобразования может быть обработана функциями C, а также отправляться через протоколы;</li>
<li>строчка текста ASCII – это допустимый текст UTF-8;</li>
<li>компактность;</li>
<li>при повреждении или утрате байтов поддерживается определение начала следующей кодовой точки с повторной синхронизацией.</li>
</ul>
<p>UTF-8 представляет собой байтовую кодировку. Она указывает на то, что символ будет представлен определенной последовательностью из одного или нескольких байтов. За счет такой концепции удается избежать проблем с порядков следования.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A7%D1%82%D0%BE_%D0%BD%D1%83%D0%B6%D0%BD%D0%BE_%D0%BF%D0%BE%D0%BC%D0%BD%D0%B8%D1%82%D1%8C_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%BE%D0%B9"></span>Что нужно помнить перед кодировкой<span class="ez-toc-section-end"></span></h2>
<p>Кодирование информации – процесс, требующий осторожности. Неграмотная реализация приводит или к ошибкам, или к некорректному отображению информации на экране, поэтому программисту необходимо запомнить следующее:</p>
<ol>
<li>Если происходит кодирование to bytes при помощи UTF-8, то перекодировать соответствующую строку из байт потребуется через эту же кодировку. Некоторые кодировки совместимы, но обычно их совместное применение приводит к утрате данных.</li>
<li>При написании кодов рекомендуется использование Unicode. Это оптимальный вариант to UTF-8 из-за применения «по умолчанию» в основной массе функций и методов.</li>
<li>Декодирование байтов строки лучше осуществлять после их получения, кодирование – непосредственно перед отправкой.</li>
</ol>
<p>В программном коде рекомендуется работать с «обычными» типами данных – строками, числами и списками. Это связано с тем, что большая часть методов в Питоне не поддерживает использование байтовых строк, либо функционируют так, что предсказать вероятное поведение проблематично.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D1%82%D1%80%D0%BE%D0%BA%D0%B8_%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B"></span>Строки и методы<span class="ez-toc-section-end"></span></h2>
<p>В the Python 3 все символы, а также документы будут автоматически переводиться в UTF-8. Это позволяет свести вероятность некорректного отображения к нулю. Но в данной версии языка есть специальные строковые методы. Они не теряют своей актуальности. Связано это с тем, что программист сможет указывать разные необходимые кодировки to application.</p>
<p>Модуль string – это наиболее простой и удобный инструмент, разделяющий символы ASCII на группы с последующим преобразованием в строки-константы. Строки можно создавать при помощи метода decode из bytes.</p>
<p>Перед углубленным изучением имеющихся методов необходимо запомнить следующее:</p>
<ul>
<li>тип str в the Python 3.0 включает в себя символы Unicode;</li>
<li>можно включить символ Юникода to строковый литерал за счет кодировки по умолчанию в виде UTF-8;</li>
<li>допускается использование Unicode-символов в идентификаторах;</li>
<li>если не получается ввести определенный символ или хочется сохранить его только в формате ASCII, допускается использование escape-последовательностей в строковых литералах.</li>
</ul>
<p>Кодирование задается в виде строк, содержащих имена кодировок. Односимвольные Unicode-строки могут быть созданы через встроенную функцию chr. Она принимает целые числа, а затем возвращает to Unicode string = 1, содержащую соответствующую кодовую точку. Обратная функция – это ord. Она принимает строку Юникода и возвращает значение кодовой точки.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B"></span>Основные методы<span class="ez-toc-section-end"></span></h3>
<p>В the Python множество методов, поддерживающих работу с кодированием информации. Таблица ниже поможет ознакомиться с наиболее популярными из них:</p>
<figure class="wp-block-table"><table><tbody><tr><td>Название</td><td>Характеристика</td></tr><tr><td>Decode и incode</td><td>Методы, отвечающие за кодирование и декодирование строки в нужном формате.</td></tr><tr><td>ASCII</td><td>Функция, которая приводит string to ASCII.</td></tr><tr><td>Chr, ord</td><td>Взаимообратные операции. Первая демонстрирует Unicode-символ соответствующий to введенному числовому значению. Вторая вернет числовой аналог конкретной символьной записи.</td></tr><tr><td>Hex, bin, int, oct</td><td>Функции, позволяющие переводить числа to различные системы счисления.</td></tr><tr><td>Bytes</td><td>Работает так же, как и метод encode. Отличается расширенными возможностями.</td></tr><tr><td>Str</td><td>Перевод байтовых строк в обычные с использованием указанной ранее кодировки.</td></tr><tr><td>Unicodedata</td><td>Модуль, умеющий работать с базами данных всех Unicode-элементов.</td></tr></tbody></table></figure>
<p>Особое внимание уделим encode и decode, а также изучим несколько наглядных примеров каждого предложенного в таблице метода.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="Encode"></span><em>Encode</em><span class="ez-toc-section-end"></span></h4>
<p>Метод Encode() используется for the входных строк. Они имеются у каждого объекта. Позволяют закодировать информацию to заданный «формат».</p>
<p>Форма представления метода: input_string.encode (encoding, errors).</p>
<p>Соответствующая запись будет обрабатывать input.string при помощи encoding. Здесь errors отвечает за поведение, согласно которому необходимо действовать при невыполнении кодирования. Encode() приводит to byte-последовательности.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/J7IQPLJxxjQ_OgUyCeS_zCc0dL7UmCWAVP7qzgYRFCjFwzqsM-p5-PeTsg-dUnjxBzXl6knEKL-ZuJToBU-zg-muOmutCkylyDilSfNu-zNQqjuFO-L_TsnWwjNDQj7R_msZFfcb-nupE-iadIbaJg" alt="Кодировки в Python и Unicode"/></figure>
<p>Результатом станет объект <class ‘bytes’>.</p>
<p>Тип кодирования, которому необходимо следовать при работе с кодом, задается при помощи параметра encoding. </p>
<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/la-ilpSl833R9f4bmP5M7-Ax6XsM_SV7I_AtQBJgfqBLydV_5XmsRRSz6064uls86d___rk-fjrW4X_6GbuOvJj-hEvnTyCCLHd2Nv0kAj-yVPf11_2yNP6QqH-eN7BZGJofKBTEJKj4JjjvBk0tkQ" alt="Кодировки в Python и Unicode"/></figure>
<p>Результат обработки приведет to следующий результат:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/EpAZlKCsOgb0l16ii5vkm1VYIrfLwQktrjN7BHogPBXrPlfnlOe40-plIvS4Uxb3qlYzXWe671-eqSIznI7SiS93rT2CIZNNcy8ul2ePmajCpbSvyx6Rs9Rr6Qjao6U8-R3T3hM5yOl_5_Vreyy5Ig" alt="Кодировки в Python и Unicode"/></figure>
<p>Здесь входная строка была закодирована to UTF-8. Она имеет префикс b, указывающий на преобразование в поток байтов. Это сделано для удобства считывания.</p>
<h5 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA"></span>Обработка ошибок<span class="ez-toc-section-end"></span></h5>
<p>Обработка ошибок при работе с кодированием информации в Python – важный аспект, которому новички не уделяют должного внимания. Отвечает за поведение приложения при неудачном преобразовании имеющихся данных. За этот момент в the Python отвечает параметр errors.</p>
<figure class="wp-block-table"><table><tbody><tr><td>Тип ошибки</td><td>Как действовать</td></tr><tr><td>Strict</td><td>Параметр по умолчанию. Он вызывает UnicodeDecodeError.</td></tr><tr><td>Ignore</td><td>Игнорирование некодированного Юникода.</td></tr><tr><td>Replace</td><td>Необходим для того, чтобы изменить все некодируемые символы. Они будут приведены к вопросительному знаку (?)</td></tr><tr><td>Backslashreplace</td><td>Отвечает за вставку to escape-последовательность обратной собой черты. Она появляется вместо некодируемых элементов in the Unicode.</td></tr></tbody></table></figure>
<p>Выше – таблица с наиболее распространенными значениями error. А вот элементарный пример кода. Он поможет изучить принципы работы с encode. Здесь во входной строке не все символы кодируются:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/ZmKoZlaEKX8Jx3B6HbKiHHLqIyptypw848ff3sI4VBUipR6H2jd4uzLHKMJKDgT5m_-p9UPMleVuw4l5PHZnmqXSg2au1u-24lG3BxA-MiDcUdkbXpI_vYSPM0AtqbblSOqv6-XkEUUbjw4JeAOLZA" alt="Кодировки в Python и Unicode"/></figure>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/xLXCirCMCdQuYry5un2P8LecOx6n4D0uCeuLDeR1NMXi3_inQs4LQhYkF7E1jP-49frS2dmrV0AMQQocHmD-XrdIhvB7FgMumGXNWUXlp9biZGSJQDW43bVbf23pXGTas3VPigopdaxDyJaPjqxi9A" alt="Кодировки в Python и Unicode"/></figure>
<p>После обработки заданного кода на экране отобразится результат, показанный выше. Здесь предстоит перевести string to SCII с игнорированием некодируемого компонента.</p>
<p>При возникновении ошибки кодирования интерпретатор выведет на экран один из вариантов:</p>
<ul>
<li>UnicodeError – общее исключение;</li>
<li>UnicodeDecodeError – появляется тогда, когда в кодировке отсутствует обрабатываемая кодовая позиция;</li>
<li>UnicodeEncodeError – исключение, возникающее, когда обрабатываемый символ является незнакомым для заданной кодировки.</li>
</ul>
<p>Все это поможет лучше усвоить работу encode и decode to the Python.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%94%D0%B5%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"></span><em>Декодирование</em><span class="ez-toc-section-end"></span></h4>
<p>Для декодирования байтового потока in the Python используется функция decode(). Она работает по аналогии с encode, но в обратном порядке.</p>
<p>Формат записи: <img alt="Кодировки в Python и Unicode" decoding="async" src="https://lh5.googleusercontent.com/b9fbBGOcdChrQnoA9S_hdX82b5QcA7M4L-YH0Gb2gfMSyNMOUKvqM4K380ZGCIv05tszKhfwl0WjVLnFL_D3MmvSQBOkMe6dhgEVX5V3OSH1XZET-ndneuGZmj_G--_teHodaD-3KNEWi-CqbHVYIw" width="330" height="54">.</p>
<p>Этот фрагмент кода наглядно показывает принцип функционирования decode() в Питоне:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/B9GOFdHMnTWFerexXK-nZbvdk_jH9WFuN7mjqcKClvNbp1gtSATru7o8LmwB1rxZX31ZnDIyd4B5BCnqX5ZRfjDyJldTlb4LIs8BpF_ua8uOxr3S7pTF6PVo_18QvcJLWSGw1RiQEpeplVp8waCGSA" alt="Кодировки в Python и Unicode"/></figure>
<p>При обработке соответствующего запроса произойдет вывод на дисплей следующей записи:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/8E29Po7RvjeObHKOpZzheMYc3RBKgLi8KV5wcCKw2ZB2IVE98LVnc_6-vcjp_yTfWALtcAeI5oRQ9mny0Xg5g_tV9f-yM4m4aDxQENuG1O5fMPsNB_y-qzbcyqXgWftkBxxKze4V4hjMB2jQMubpEQ" alt="Кодировки в Python и Unicode"/></figure>
<p>Параметр decoding отвечает за определение типа кодирования, из которого производится декодирование байтовой последовательности. Параметр errors указывает на поведение при сбоях. Здесь используются те же методы, что и в encode.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9B%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D0%BB%D1%8B_%D0%B2_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0%D1%85_Python"></span>Литералы в строках Python<span class="ez-toc-section-end"></span></h3>
<p>Использование конструктора str() – не единственный вариант использования текстовых данных в программном коде. Иногда объект соответствующего типа вводится напрямую:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/WJGm6_nZ32AZHer4PBQgYVu5kDqZWe9-At24KaKGHPZDuLtDGXVVC_Q41xsqV2x0kMBCdbP6q5FMNd_v6USRqAx3JwKLpK3bCXoLW9jVcrf_GKXZPXPQWEen5m8pfq-rDMt2o-9VGqr1Ff4uvEs0vw" alt="Кодировки в Python и Unicode"/></figure>
<p>В приложении, написанном на Питоне, при помощи Unicode можно напечатать символы, отсутствующие на клавиатуре. Они копируются и вставляются непосредственно в оболочку интерпретатора.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/yVzWCvHZmVF0gESHWZ5p4bu48hlGEYky9F2jHonB_l_jFiC3vpiuo1tYTmckdiOqXQjKovA0qvVj5oAYc_XOEDY4gfxf8sdwOssnNQ_fuT0rKEF2QH2L9lMdb5BOFsM0-I2cS-HE--bqLCxm10nqiw" alt="Кодировки в Python и Unicode"/></figure>
<p>Выше – наглядный пример того, как это выглядит в коде. Один литерал может быть записан при помощи Unicode в the Python несколькими способами: сочетаниями клавиш или прямым вводом необходимого элемента в нужном месте.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/DNfeM62pSgSDoJWULpZIY1Kar9lFh6Zag9aR1L9iY2nMMNnHoO4dbikdO7zTTIHZxhkbb8skfBZbzNSpw4LIkjkU7vaXsi3mfOn_sifE_hNNdn4W2a0fJIeXo3UgY4Dhv-s4fZhCqLoq6GHPIHQ0_w" alt="Кодировки в Python и Unicode"/></figure>
<p>Выше – таблица, показывающая все способы задания символьных записей через экранирующие последовательности.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B0%D0%B3%D0%BB%D1%8F%D0%B4%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B"></span>Наглядные примеры<span class="ez-toc-section-end"></span></h3>
<p>Ранее было сказано о методах работы со строками в Python. Далее будут рассмотрены примеры для каждого случая.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/3FXg09FYHGqIjbPo4TxnsSIIPT5XsoI22ZrWNkxrWRpjgaLWK0OX3lBbJukDMGQ_r7seIuIwbkXREYEcmv-r60nqYvH7keDYcR6Vrf3es0mz34c09QWc88xWOlxIRffiRVTHjCp5lSCChUGs7vqb1Q" alt="Кодировки в Python и Unicode"/></figure>
<p>Это – способ перевода заданного текстового значения str to ASCII. Экранирование русского слова связывается с отсутствием для него стандартного знакового набора в ASCII. У него нет 1-байтового представления.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/4--bxFrSzb6ZRvfqEGwVLwWFUwKn6HBYz4uqcOmtQU_T3ZKD7CUzPzxmmhKLf6Vni31j1n0nt0QTh7Pr0y7rxMiYsXrau0bS0brBLNsvf9DAIxuwOkPpYn7il_QJzhaOel6UFwaWBf_n66BVV2AVeA" alt="Кодировки в Python и Unicode"/></figure>
<p>А вот – метод bytes. Он будет преобразовывать в одноименный объект не только строки и числа, но и последовательности числовых знаний. В них каждый элемент – это тот или иной символ.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/reyU3hzCf_pjJfVCqCtYqXBTBwezvO8tqosvfEyB2q6PFaPdINvOwir3WcRsfPjPolEieAxlsUQ1rCGEdxbPeW2veweqNyvhN_wPJyTX9wwm6fGaAqiaS9G8IJmxfny-Rs9lZ-KTNiVduiK0zXNeew" alt="Кодировки в Python и Unicode"/></figure>
<p>Это – наглядный пример использования встроенного модуля Unicodedata. Он позволяет уточнить имя любого Юникод-символа, а затем отобразить его по имени.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F"></span>Регулярные выражения<span class="ez-toc-section-end"></span></h3>
<p>Регулярные выражения, которые поддерживаются модулем re, могут быть приведены to bytes или strings. Часть последовательностей специальных символов (\d или \w) обладают разными значениями. Они меняются в зависимости от формы представления шаблона – байтами или строками. Пример – \d соответствует категории символов в диапазоне от 0 to 9 включительно, но в строках – любому символьному значению, находящемуся в пределах категории Nd.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/37F9XOIxeKwgD9r1JJ9NnZIlya5nb1czesnYlWiHK23ZdnxKdWGaP50hUh19HujlYUlIZ7l18LSZuxA9F7jDeC20XfMKMxsOdIdLgDy1MrGS7glt0rIKr2Tym4BgAyN8-VbUuJfm5QIedgEcQsrZjA" alt="Кодировки в Python и Unicode"/></figure>
<p>Выше – пример работы с числом 57. Оно будет записано арабскими и тайскими цифрами. При запуске \d+ сопоставит тайские цифры и выведет их на печать. Если ранее был указан флаг re.ASCII для compile(), \d+ получит соответствие подстроке «57».</p>
<p>С основами кодирования разобраться удалось. <a href="https://www.youtube.com/watch?v=O6RYyjUkToQ" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Этот<span class="wpel-icon wpel-image wpel-icon-6"></span></a> видео-урок поможет новичкам быстрее разобраться в соответствующей теме. Теперь изучим несколько принципов работы со строками в Питоне, которые могут пригодиться разработчику.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B2%D0%BE%D1%80%D0%B0%D1%87%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0"></span>Сворачивание регистра<span class="ez-toc-section-end"></span></h3>
<p>Сворачивание регистра – способ унификации текста в любой форме представления к каноничной. Пример – приведение всей строки to нижний регистр. Над текстов будут проведены некоторые дополнительные преобразования. В Python 3.3 есть метод str.casefold, который помогает работать со сворачиванием регистра. Если обрабатываемый текст содержит исключительно символы из кодировки latin1, результат его применения окажется точно таким же, как и в случае с str.lower().</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/2dJZq9ShbxJ-baLlnt9dX65c-GXNrHcp18MeNI9shJayz_2Y3Y3cjII_wWWUND5H7nlbi5xZqcSoF368yd7KMu4w4RAswtlu-Dw3D7SFqrOl26LT2ZiahaMMeSyxg4t0GEiQPOdPXu6VPH_EXQSVEQ" alt="Кодировки в Python и Unicode"/></figure>
<p>Здесь метод не просто привес текст к нижнему регистру, но и использовал преобразование для специфического символа из немецкого алфавита.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F"></span>Нормализация<span class="ez-toc-section-end"></span></h3>
<p>Нормализация – приведение имеющегося текста к единому представлению на дисплее устройства.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/e-ro5a3HklUyQydEizU8vOLjeT36bBVJsgp0V2tpqsd5ChwkEcbk1x3sY9EB5j-RiRf10NAIyGMx-ONCQWUFuuuf85qXWjmqe-hfibBqevZLB174bh0GSru-GZRLfh3xJKT91IchOs9nVYNVFqUK2w" alt="Кодировки в Python и Unicode"/></figure>
<p>Внешне данные записи выглядят идентично. Если попытаться перевести имена соответствующих символов подобно интерпретатору the Python, результат окажется нестандартным.</p>
<p>В Питоне имеется встроенный модуль, содержащий сведения о символьных значениях Unicode, их имена, являются ли они цифрами и так далее. Методы по типу str.isdigit будут брать информацию именно из соответствующей «базы». Речь идет о Unicodedata, рассмотренном ранее.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/tDyOHwJox_HLWNMWoxe4Msx2DDG2Zkq57ZYFN5ISS9Rh8toCBsMr6kdxxt3S2ktSyplan_JodU8t_TPMZHTSt7m56H-VtITuykD4mkmkOzjCNq-LfT-ZISNsT0cCyJ864rUBwGps87ScQB7t3aROIw" alt="Кодировки в Python и Unicode"/></figure>
<p>При обработке данного фрагмента произойдет вывод следующего результата:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/32oBGn433AmMC28tXwL4TtX-WJkqmUM_xr375wPde63fNqMZFZCakF7gzIsPe5U5QwRYSKNCapPDTEGfIQ18COnSaavdCxEa0U6Gc6bFAjFMpbqj-GbQTCk7U9PHAxanlhVr5_yUHUk5mV6OvYzt8g" alt="Кодировки в Python и Unicode"/></figure>
<p>Здесь интерпретатор рассматривает введенные значения в качестве двух разных, несмотря на их одинаковое графическое отображение to Unicode. Символьные значение подобной формы носят название канонических эквивалентов. Приложения их считывают одинаково, а интерпретаторы – нет.</p>
<p>Нормализация реализована через функцию unicodedata.normalize. Первый аргумент – это форма нормализации. Она определяет, эквивалентны ли две строки Unicode по отношению друг к другу. Всего существуют 4 формы представления:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/bMIihVtoQovshpb-hGZ8b5EIUlysicEBRsP1-fMNi-pjY5Rt4xlChp0ksZ7dzw3CMncYNx3abcquhsbfjGG6UPwsDqqCMI1reux_rHOoRk4EFvfp2bF1vkIWsW6j4Um6lEUmCm36V5h6y48Fm7YdoQ" alt="Кодировки в Python и Unicode"/></figure>
<p><a href="https://habr.com/ru/post/579868/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Здесь<span class="wpel-icon wpel-image wpel-icon-6"></span></a> каждый вариант изучен более подробно. Алгоритмы нормализации пригодятся при поиске валидных документов или непосредственного индексирования текста.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5_%D1%80%D0%B0%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D1%8C%D1%81%D1%8F_%D1%81_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC"></span>Как лучше разобраться с кодированием<span class="ez-toc-section-end"></span></h2>
<p>Кодирование информации, а также работа с Unicode и UTF-8 в Python новичкам кажется сложной задачей, особенно если предстоит использование больших объемов данных. В Сети полно полезных сведений, литературы, уроков и упражнений по рассмотренному в статье направлению. Но разобраться в них бывает достаточно проблематично.</p>
<p>Чтобы encode, decode и другие методы Питона не доставляли хлопот, рекомендуется закончить компьютерные онлайн курсы. Пример – от образовательного центра OTUS. Все занятия здесь проводятся в виде вебинаров, посмотреть их можно в любое время.</p>
<p>Преимущества дистанционных курсов:</p>
<ul>
<li>быстрое обучение основам выбранного языка и обучение кодированию информации с нуля;</li>
<li>сжатые сроки – до 12 месяцев;</li>
<li>постоянное кураторство опытными специалистами и интересные домашние задания;</li>
<li>совместимость с обыденной жизнью – такая форма обучения подходит даже при наличии полноценного трудового дня и семьи;</li>
<li>помощь в формировании портфолио и постоянная практика.</li>
</ul>
<p>В конце обучения ученики получают не только полезные знания и навыки, но и их документальное подтверждение – электронный сертификат.</p>
<figure class="wp-block-image"><a href="https://otus.ru/lessons/python-professional/?utm_source=oj&utm_medium=affilate&utm_campaign=python" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2022/07/Python_970x90-20219-8b1a8e-2.png" alt="Кодировки в Python и Unicode" class="wp-image-3953" srcset="https://otus.ru/journal/wp-content/uploads/2022/07/Python_970x90-20219-8b1a8e-2.png 970w, https://otus.ru/journal/wp-content/uploads/2022/07/Python_970x90-20219-8b1a8e-2-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2022/07/Python_970x90-20219-8b1a8e-2-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2022/07/Python_970x90-20219-8b1a8e-2-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<p></p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/python/" rel="tag" data-wpel-link="internal">Python</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fkodirovki-v-python-i-unicode%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkodirovki-v-python-i-unicode%2F&text=%D0%9A%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8%20%D0%B2%20Python%20%D0%B8%20Unicode" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkodirovki-v-python-i-unicode%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkodirovki-v-python-i-unicode%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2023%2F02%2Foj-1080x720-18-1.jpg&description=%D0%9A%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8%20%D0%B2%20Python%20%D0%B8%20Unicode" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/set-v-c-i-c/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/set-v-c-i-c/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Set в C# и C++" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-17-150x106.jpg 150w, https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-17-300x212.jpg 300w, https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-17-1024x724.jpg 1024w, https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-17-768x543.jpg 768w, https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-17-1536x1086.jpg 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-17-150x106.jpg" data-sizes="(max-width: 150px) 100vw, 150px" title="Set в C# и C++" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/set-v-c-i-c/" data-wpel-link="internal">Set в C# и C++</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/set-v-c-i-c/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2023-02-05T12:01:54+00:00">5 февраля, 2023</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">7 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/c-sharp-i-modifikatory/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/c-sharp-i-modifikatory/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="C Sharp и модификаторы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-19-150x106.jpg 150w, https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-19-300x212.jpg 300w, https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-19-1024x724.jpg 1024w, https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-19-768x543.jpg 768w, https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-19-1536x1086.jpg 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2023/02/oj-1080x720-19-150x106.jpg" data-sizes="(max-width: 150px) 100vw, 150px" title="C Sharp и модификаторы" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/c-sharp-i-modifikatory/" data-wpel-link="internal">C Sharp и модификаторы</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/c-sharp-i-modifikatory/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2023-02-05T14:29:53+00:00">5 февраля, 2023</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">5 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/kodirovki-v-python-i-unicode\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 18:11:04 GMT -->