undo
search menu close

Экранирование и кодирование символов

📅 17 апреля 2025 г. 0:27

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

Управляющие символы

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

Рассмотрим наиболее часто используемые управляющие символы в Python.

Управляющий символ Назначение
\n (от англ. newline – новая строка) Перенос строки
\t (от англ. tab – табуляция) Добавление табуляции (отступа)
\r (от англ. return – вернуться) Возврат каретки в начало строки
\b (от англ. backspace – пробел назад) Удаление последнего символа
Робот Кеша читает

Термин «каретка» широко применяется программистами для обозначения позиции текстового курсора, указывающей место ввода. Однако каретка и управляющие символы берут свое происхождение от механических пишущих машинок. Раньше кареткой называли подвижную часть машинки, которая определяла положение печатающего элемента. Клавиши вроде «Перевод строки» и «Возврат каретки» помогали операторам начинать новые строки и возвращаться к началу текущей строки соответственно. Со временем эти термины перешли в компьютер, сохранив свое первоначальное функциональное предназначение.

Символ переноса строки \n позволяет вывести на экран несколько строк текста без использования дополнительных вызовов функции print():

poem = "Духовной жаждою томим,\nВ пустыне мрачной я влачился."
print(multiline_string)

Здесь символ \n указывает Python, что после "Духовной жаждою томим," следует перейти на новую строку:

Духовной жаждою томим,
В пустыне мрачной я влачился.

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

countries = "Страна\tСтолица\nРоссия\tМосква\nКитай\tПекин"
print(countries)

При выводе такой строки на экран каждый столбец «Страна-Столица» отделен отступом:

Страна  Столица
Россия  Москва
Китай   Пекин

Символ возврата каретки \r перемещает курсор в начало текущей строки. Если после этого выводится новый текст, он перезаписывает существующий:

print("Или вырубишь\rЧто написано пером, не вырубишь топором")
print("Хотя если сообщение о-очень длинное, то вырубишь только часть\rЧто написано пером, не вырубишь топором")

Здесь в первой строке часть до символа \r будет перезаписана полностью, а во второй – частично, так как она длиннее:

Что написано пером, не вырубишь топором
Что написано пером, не вырубишь топором вырубишь только часть

Символ перевода каретки назад \b удаляет последний символ:

print("123\b45")
print("Ой ты\b\b\b, степь широкая!")

Подряд можно использовать несколько управляющих символов, поэтому во втором примере полностью удалена строка " ты":

1245
Ой, степь широкая!

Экранирование символов

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

Рассмотрим простой случай, когда нужно сохранить путь к файлу в Windows:

path = "C:\Python projects\task.py"
print(path)

Результат вывода такой строки на экран будет неожиданным:

C:\Python projects      ask.py

Появление отступа связано с тем, что комбинация \t в \task.py рассматривается Python как управляющий символ, обозначающий добавление табуляции. Чтобы исправить эту ситуацию, нужно экранировать символ обратной косой черты, добавив перед ней ещё один обратный слэш:

path = "C:\\Python projects\\task.py"
print(path)

Теперь путь выводится корректно, так как каждый символ \ был экранирован:

C:\Python projects\task.py

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

print("На сцене ставили \"Колобок\"") 
# Вывод: На сцене ставили "Колобок"

Необработанные строки

Однако экранирование каждого специального символа вручную может показаться неудобным и сделать строку трудночитаемой. Поэтому Python предлагает альтернативный способ: необработанные строки (англ. – raw strings). В таких строках любая комбинация символов, включающих обратный слэш, интерпретируется буквально, а не как управляющая последовательность.

Создать необработанную строку можно с помощью префикса r перед открывающей кавычкой строки:

path = r"C:\Python projects\task.py"
print(path) 
# Вывод: C:\Python projects\task.py 

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

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

Кодирование символов

Компьютер хранит и обрабатывает информацию в виде чисел 0 и 1, поэтому каждому символу соответствует определённая числовая последовательность. Например, заглавная английская буква A может выглядеть как 01000001.

Процесс преобразования символов в числовые коды и обратно называется их кодированием.

Если каждый символ представляет собой последовательность из 8 бит (чисел 0 и 1), то такая система позволит представить до 28 = 256 различных символов. Однако этого может быть недостаточно для некоторых языков, ведь только в китайском языке тысячи иероглифов.

Исторически существовало множество различных кодировок, каждая из которых поддерживала определенный набор символов (например, ASCII для английского языка или КОИ-8 для кириллицы). Но это вызывало трудности при передаче текста между разными языками и платформами, так как без нужной кодировки текст был нечитаемым.

Современные системы используют универсальный стандарт для кодирования практически всех существующих символов, включая кириллицу и даже эмодзи – Юникод (англ. – Unicode). Каждому символу в Юникоде сопоставляется определенное шестнадцатеричное значение с префиксом U+. Например, значение U+1F60A соответствует эмодзи 😊, а U+0410 – заглавной русской букве А.

Python позволяет напрямую встраивать символы Юникода:

print("\u041f\u0440\u0438\u0432\u0435\u0442!") 
# Вывод: Привет!

Кодировка UTF-8

Стандарт Юникод решает проблему совместимости разных кодировок благодаря единому набору символов, однако для фактического хранения символов в памяти компьютера нужен метод их представления в двоичной форме. Самым распространённым способом кодирования символов Юникода является использование кодировки UTF-8 (от англ. Unicode Transformation Format, 8-bit – формат преобразования Юникода, 8-бит).

UTF-8 обладает рядом преимуществ, включая совместимость с ASCII (первые 128 символов Unicode соответствуют ASCII), а также возможность кодирования любых символов Юникода с использованием от 1 до 4 байт. Так для кодирования латинских символов достаточно одного байта (или 8 бит) – английская буква A (U+0041) кодируется как 01000001, однако кириллические буквы требуют двух байт – русская буква А ( U+0410) кодируется как 11010000 10010000.

Благодаря этим особенностям UTF-8 стал кодировкой по умолчанию в большинстве операционных систем и программ, включая Python 3.

Функции для работы с кодированием символов

Python предоставляет встроенные инструменты для взаимодействия с внутренними представлениями символов. Основные из них – функции ord() и chr()

Функция ord() возвращает числовой эквивалент заданного символа в Юникоде, в то время как функция chr() делает противоположное и получает символ по указанному числу.

Функция ord(x)
Описание Возвращает номер символа x в Юникоде
Параметры x – строка, представляющая собой один символ
Возвращаемое значение Целое число
Функция chr(n)
Описание Возвращает символ в Юникоде по номеру n
Параметры n – порядковый номер символа в Юникоде
Возвращаемое значение Строка

Например, получим порядковые номера некоторых символов:

print(ord("a")) 
# Вывод: 97

print(ord("1")) 
# Вывод: 49

А теперь по полученным порядковым номерам символов вернём сами символы:

print(chr(97)) 
# Вывод: a

print(chr(49))
# Вывод: 1
Задания для самопроверки

1. Что делает управляющий символ \n?

 
Ответ

2 Выведите на экран следующую строку:

Величина        Единица
Сила света      кандела
Сила тока       ампер
 
Ответ

3. Выведите на экран следующие строки:

C:\Program files\browser\test
A:\necessary files\timetable
D:\reading\bulgakov
 
Ответ

4. Что такое Юникод?

 
Ответ

5. Чем отличаются функции ord() и chr()?

 
Ответ
 
 
arrow_back_ios Назад
Дальше arrow_forward_ios

 💬 0 комментариев
person
email