Текстовые данные
Текст
Что такое текст?
Текст — это упорядоченная последовательность символов, несущая смысловую нагрузку и предназначенная для восприятия человеком или обработки машиной. В вычислительных системах текст фиксируется в виде данных, организованных по правилам конкретного формата и представленных в выбранной кодировке.
Но текст для машины – лишь набор сигналов, которые закодированы в файле определенного формата и с определённой кодировкой символов.
Работа с текстовыми файлами – фундаментальный навык в программировании и ИТ. Различные форматы файлов служат разным целям — хранение данных, конфигурация программ, документирование и многое другое. Рассмотрим основные текстовые форматы и их особенности.
Элементы текстового документа
Текст в редакторе или процессоре организован иерархически — от отдельного знака до целого файла:
| Элемент | Определение |
|---|---|
| Символ | Минимальная единица: буква, цифра, знак препинания, пробел |
| Слово | Группа символов, обозначающая понятие |
| Строка | Фрагмент от одного перевода строки до другого (в коде — часто одна инструкция) |
| Предложение | Законченное высказывание |
| Абзац | Блок предложений с общим смыслом или оформлением |
| Страница | Часть документа, умещающаяся на одном листе или экране |
| Документ | Весь файл: отчёт, письмо, статья |
Теория технологий создания и обработки текста (редакторы, процессоры, НИС, OCR) — базовая информатика, раздел 16.
Кодировка символов
Символы, таблица и кодировка
Таблица символов — совокупность символов, каждому из которых сопоставлён уникальный числовой код (идентификатор). Эта таблица служит основой для кодирования и декодирования текста: при записи текста символы заменяются числами; при чтении — числа преобразуются обратно в символы. Примеры таких таблиц — ASCII, Windows-1251, Unicode.

Текстовый символ — минимальная единица текста, которой соответствует определённое изображение (например, буква "А", цифра "7", знак препинания "?", пробел или управляющий символ перевода строки). Каждый символ имеет уникальное числовое представление в рамках выбранной таблицы символов.
Кодировка символов — правило, по которому каждый символ из таблицы символов преобразуется в последовательность байтов при записи в файл или передаче по сети. Кодировка определяет, какие символы доступны, как они выглядят при чтении, и сколько байтов требуется для хранения одного символа. Без указания или корректного распознавания кодировки текст может отображаться как набор вопросительных знаков, кракозябр или иероглифов. Выбор кодировки — обязательный этап при создании или чтении текстового документа.
ASCII (American Standard Code for Information Interchange) был создан в 1963 году и стал основной кодировкой для представления текста в виде чисел. С появлением UNIX (1970) текст стал уже частью системы, храня конфигурацию, логи, скрипты. Позже такую же практику переняли MS-DOS, Windows (README, к примеру, был файлом для представления информации о программе).
Кодировки эволюционировали вместе с потребностями информационных систем. На ранних этапах использовались однобайтовые таблицы (один символ — один байт), что позволяло представить максимум 256 символов. Постепенно возникла необходимость поддерживать множество языков, специальные символы, эмодзи и технические знаки — появилась многоуровневая система Unicode и универсальные кодировки на её основе.
UTF-8
UTF-8 — современная, универсальная, обратно совместимая кодировка, основанная на стандарте Unicode. Она использует переменное число байтов для представления одного символа:
- символы ASCII (латинские буквы, цифры, знаки препинания) кодируются одним байтом — это делает UTF-8 полностью совместимым со старыми системами;
- символы кириллицы, греческого, арабского и других алфавитов — двумя байтами;
- иероглифы, эмодзи, редкие символы — тремя или четырьмя байтами.
UTF-8 стала де-факто стандартом в вебе, операционных системах, языках программирования и протоколах. Почти все современные текстовые редакторы при сохранении предлагают UTF-8 по умолчанию. Она не требует указания порядка байтов (BOM), хотя опциональный BOM может присутствовать.
Пример — слово «Привет»
| Буква | Unicode | UTF-8 (hex) |
|---|---|---|
| П | U+041F | D0 9F |
| р | U+0440 | D1 80 |
| и | U+0438 | D0 B8 |
| в | U+0432 | D0 B2 |
| е | U+0435 | D0 B5 |
| т | U+0442 | D1 82 |
Итого: 12 байт для 6 букв.
Пример — эмодзи 🐈
| Символ | Unicode | UTF-8 (hex) |
|---|---|---|
| 🐈 | U+1F408 | F0 9F 90 88 |
4 байта на один эмодзи в UTF-8.
Пример — «кракозябры»
Файл сохранён в UTF-8, открыт как Windows-1251:
| UTF-8 байты | Ожидалось | Видно в CP1251 |
|---|---|---|
D0 9F D1 80 D0 B8 D0 B2 D0 B5 D1 82 | Привет | Привет |
| Текст | ASCII/UTF-8 | Windows-1251 | CP866 (DOS) |
|---|---|---|---|
Hello | 5 байт | 5 байт | 5 байт |
Мир | 6 байт | 3 байта | 3 байта |
A | 41 | 41 | 41 |
А (кириллица) | D0 90 | C0 | 80 |
Windows-1251
Windows-1251 — однобайтовая кодировка, разработанная Microsoft для представления кириллических символов в операционных системах Windows. В ней первые 128 кодов совпадают с ASCII (латиница, цифры, пунктуация), а вторая половина (коды 128–255) отведена под буквы русского, украинского, белорусского, болгарского и других кириллических алфавитов, а также дополнительные знаки.
Windows-1251 широко применялась в русскоязычном сегменте интернета в 1990–2000-е годы — в HTML-страницах, электронных письмах, базах данных. Сегодня её использование сокращается — большинство систем мигрировало на UTF-8. Однако файлы в Windows-1251 всё ещё встречаются: особенно в унаследованных системах, старых документах и региональных ПО.
Другие кодировки
Помимо UTF-8 и Windows-1251, в истории и практике используются и другие:
-
KOI8-R — советская/российская кодировка для кириллицы, созданная в 1980-х для Unix-систем. Отличалась тем, что при потере старшего бита текст оставался читаемым латиницей (например, "Русский" → "rUSSKIJ"). Активно использовалась в FIDO-нет и раннем Рунете.
-
ISO-8859 — семейство однобайтовых кодировок от стандарта ISO:
- ISO-8859-1 (Latin-1) — западноевропейские языки;
- ISO-8859-2 — центральноевропейские;
- ISO-8859-5 — кириллица (редко использовалась в практике);
- ISO-8859-7 — греческая;
- ISO-8859-8 — иврит.
Все они уступили место UTF-8.
-
UTF-16 — кодировка, в которой каждый символ представлен двумя или четырьмя байтами. Используется в Windows API, Java (внутреннее представление строк до Java 9 частично опиралось на UTF-16), JavaScript (в спецификации ECMAScript строки описаны как последовательности 16-битных кодовых единиц). Неудобна для хранения ASCII-текста (вдвое больше места), требует указания порядка байтов (BOM:
FF FEилиFE FF). -
UTF-32 — каждый символ — ровно 4 байта. Проста для обработки (фиксированная длина), но неэффективна по памяти. Применяется редко — в основном в специализированных библиотеках обработки текста.
-
CP866 (DOS Cyrillic) — кодировка для кириллицы в MS-DOS. Использовалась в консолях и ранних играх. Отличается от Windows-1251 расположением символов (например, русская буква "А" имеет код 128 в CP866, но 192 в Windows-1251).
Конвертер кодировки
Play ITЗагрузка интерактивного демо…
Письменности
Латиница — письменность, основанная на древнеримском алфавите. В современном виде состоит из 26 основных букв (A–Z), дополненных диакритическими знаками (например, é, ñ, ü) в языковых вариантах. Используется в английском, французском, немецком, испанском, польском и многих других языках. Является базовой для большинства технических стандартов — имена переменных, домены, протоколы и команды почти всегда используют латинские символы.
Кириллица — алфавит, созданный в IX веке на основе греческого письма и дополненный символами для передачи славянских звуков. Современная кириллица включает 33 буквы в русском языке, но может расширяться или сокращаться в зависимости от языка (например, украинский — 33 буквы, но иные; сербский — 30; болгарский — 30). Используется в русском, украинском, белорусском, болгарском, сербском, македонском, казахском (в части версий), монгольском и других языках.
Арабская — курсивная письменность, пишущаяся справа налево. Используется в арабском, персидском, урду, уйгурском. Включает базовый набор букв и множество вариантов начертания в зависимости от позиции в слове.
Балтийская — группа языков (литовский, латышский), использующих расширенную латиницу с диакритикой (ā, č, š, ž).
Кельтская — в современном IT встречается редко; языки (ирландский, валлийский) используют латиницу с особыми буквами и акцентами.
Центрально-европейская — набор символов на основе латиницы для польского, чешского, венгерского, словацкого языков (например, ł, ř, ő, ň).
Китайская — иероглифическая система, где каждый символ представляет морфему. Поддерживается в Unicode (блоки CJK — Chinese, Japanese, Korean). Требует много байтов на символ (обычно 3 в UTF-8).
Восточно-европейская — часто относится к кириллическим языкам за пределами России (сербский, македонский) или к расширенной латинице (румынский — ă, â, ș, ț).
Греческая — алфавит, используемый в греческом языке и в математике/физике для обозначения переменных (α, β, γ, Δ, Σ и т.д.).
Иврит — письменность, пишущаяся справа налево, без буквенных обозначений кратких гласных в базовой форме. Используется в иврите.
Японская — комбинированная система: иероглифы кандзи (заимствованы из китайского), слоговые азбуки хирагана и катакана. Поддерживается в Unicode; часто вызывает сложности при сортировке и поиске.
Корейская — хангыль, фонетический алфавит, где символы объединяются в блоки по слогам. Эффективно кодируется в UTF-8 (по 3 байта на символ).
Северо-европейская — скандинавские языки (шведский, норвежский, датский, исландский), использующие латиницу с дополнительными буквами (å, ä, ö, ø, þ, ð).
Тайская — абугида (система, где базовый символ обозначает согласный со встроенным гласным, изменяемым диакритикой). Пишется слева направо, без пробелов между словами.
Турецкая — латиница с уникальными буквами (ç, ğ, ı, İ, ö, ş, ü). Обратите внимание: ı (латинская i без точки) и İ (латинская I с точкой) — разные буквы.
Западно-европейская — покрывает французский, немецкий, испанский, итальянский и др. Расширенная латиница — é, à, ñ, ß, ç, œ.
Вьетнамская — латиница с обильным использованием тоновых знаков и диакритики (à, á, ả, ã, ạ, ă, â, đ и др.). Один из самых нагруженных диакритикой алфавитов.
Все эти письменности включены в стандарт Unicode, начиная с версии 1.0 (1991) и расширяясь в каждой новой редакции. Современные ОС, браузеры и языки программирования работают с ними через UTF-8.
Преобразование кодировки
Преобразование кодировки — процесс перекодирования текста из одной кодировки в другую без потери смысла. Это необходимо, когда файл записан в кодировке A, а программа ожидает кодировку B.
Пример: файл сохранён в Windows-1251, но веб-сервер отдаёт его как UTF-8 — браузер покажет "Обычный РїРѕР"ьзоватеР"СЊ". Чтобы исправить это, нужно:
- прочитать байты файла как Windows-1251 → получить правильные символы Unicode;
- записать эти символы в новом файле как UTF-8.
Преобразование выполняется:
- вручную — с помощью редакторов (Notepad++, VS Code: "Сохранить как…" → выбрать кодировку);
- автоматически — при импорте в базы данных (например, PostgreSQL требует указания кодировки при создании БД и при загрузке данных);
- программно — через библиотеки (в Python —
str.encode('windows-1251').decode('utf-8'), в Node.js — пакетiconv-lite).
Важно: преобразование возможно только если исходная кодировка определена верно. Если файл уже повреждён (например, дважды декодирован как UTF-8), восстановление может быть невозможным.
Документ, читаемость и форматирование
Текстовый документ — файл, основное содержимое которого состоит из последовательности текстовых символов, записанных в соответствии с определённой кодировкой. Текстовый документ может включать структуру (например, секции и параметры), комментарии, управляющие символы (такие как перевод строки), но не содержит бинарных данных, изображений или сложных стилей оформления, привязанных к конкретному приложению.
Форматирование — система условных обозначений внутри текстового документа, задающая структуру, иерархию или визуальное представление содержимого. Форматирование может быть явным (например, теги <b>, **, #), неявным (отступы, позиция символа), или отсутствовать вовсе. Цель форматирования — выделить заголовки, списки, цитаты, код, параметры и прочие элементы для удобства чтения и парсинга.
Читаемость — свойство текста, позволяющее человеку быстро и без усилий воспринимать его содержание. Высокая читаемость достигается за счёт простого языка, логичной структуры, умеренного объёма информации на единицу текста, продуманного форматирования и отсутствия избыточной технической сложности.
Машиночитаемость — свойство текстового документа, позволяющее программе однозначно интерпретировать его структуру и данные без участия человека. Машиночитаемый текст следует строгим правилам синтаксиса (например, JSON требует двойных кавычек, фигурных скобок, запятых), не допускает неоднозначностей и предполагает наличие схемы или известного формата.
Человекочитаемость — свойство текстового документа, обеспечивающее удобное и прозрачное восприятие его содержания человеком. Такой текст использует осмысленные имена, комментарии, отступы, пустые строки, понятные комментарии и избегает излишней краткости, сокращений или "магических" значений. Человекочитаемость важна при написании конфигураций, логов, README, инструкций.
Основные текстовые форматы
TXT
TXT (Plain Text, "чистый текст") — базовый текстовый формат, не содержащий элементов форматирования, метаданных или встроенных объектов. Файл TXT представляет собой последовательность символов, закодированных одной из стандартных кодировок (чаще всего UTF-8 или Windows-1251). Его можно открыть и отредактировать любым текстовым редактором — от "Блокнота" до VS Code. TXT используется для логов, временных заметок, простых конфигураций и передачи информации в максимально совместимом виде.
TXT – обычный текстовый файл:
- простейший формат;
- нет форматирования;
- использует кодировки ASCII, UTF-8, Windows-1251 и др.;
- универсальная читаемость любым текстовым редактором;
- используется для любых целей – логи, чтение/запись в программах, конфигурациях.
Создайте файл txt. Откройте этот файл и добавьте текст. Сохраните файл.
INI
Инициализация — процесс подготовки программной системы к работе — загрузка настроек, выделение ресурсов, установка начальных значений, подключение компонентов. В контексте текстовых файлов инициализация часто означает чтение конфигурационного файла при запуске программы, чтобы определить, как она должна вести себя — например, на каком порту слушать подключения, куда писать логи, какие параметры использовать по умолчанию.
INI – стандартный формат конфигурационных файлов. Используется во многих языках программирования и формируется по структуре:
[Section]
key=value
; Комментарий
Слово "ini" происходит от английского слова "initialization" (инициализация) . Это связано с тем, что файлы с расширением .ini часто использовались для настройки параметров программ и систем на начальном этапе их запуска. Формат INI был создан как простой человекочитаемый текстовый формат , позволяющий легко читать и изменять параметры конфигурации. Наиболее известный пример — файл win.ini, который использовался в ранних версиях Windows (например, Windows 3.1) для хранения системных настроек. Важно отметить, что несмотря на существование INI-файлов, Microsoft перешла к Windows Registry - специальное централизованное хранилище настроек, реестр.
Такой формат состоит из секций (квадратные скобки "[]") и параметров (записываются в виде ключ=значение). Сейчас его можно встретить в разных конфигурациях игр, утилит и простых приложений.
CONFIG
Конфигурационный файл — текстовый документ, содержащий параметры и настройки программного обеспечения. Он позволяет отделить настройки от кода, делая приложение гибким и адаптируемым без перекомпиляции. Конфигурационные файлы могут быть написаны в различных форматах (INI, JSON, YAML, XML, TOML) и часто содержат секции, ключи, значения, а также комментарии для пояснения назначения параметров.
CONFIG (от англ. configuration) — это стандартный формат хранения настроек приложений в экосистеме .NET, разработанный Microsoft как часть платформы .NET Framework в 2002 году, это XML-файл со строго определёнными секциями и элементами, пример:
<configuration>
<appSettings>
<add key="Timeout" value="30" />
</appSettings>
</configuration>
В .NET Core и последующих версиях (.NET 5, 6, 7 и т.д.) появился новый стандарт хранения конфигураций — appsettings.json. Этот формат стал популярным благодаря своей простоте, компактности и широкому использованию в мире REST API, микросервисов и облачных решений.
Файлы без расширения
Файлы без расширения – те, у которых в имени после точки ничего нет. Часто используются для README, LICENSE, .gitignore, .env, а в Unix-системах могут быть исполняемыми. Внутри них может быть что угодно.
README — текстовый файл, размещаемый в корне проекта и предназначенный для первого ознакомления с ним. Он содержит краткое описание, инструкции по установке и запуску, требования к окружению, примеры использования, ссылки на документацию и контактную информацию. Название происходит от английского read me — "прочти меня". Часто пишется в формате Markdown (README.md), что позволяет использовать заголовки, списки, код и ссылки.
LICENSE — файл, в котором указываются условия использования, копирования, модификации и распространения программного обеспечения. Он фиксирует юридический статус проекта и защищает права авторов и пользователей. В открытых проектах обычно выбирается одна из стандартных лицензий: MIT, Apache 2.0, GPL, BSD. Файл LICENSE часто помещают в корень репозитория рядом с README.
.gitignore — скрытый конфигурационный файл в системе контроля версий Git. Он содержит список путей и шаблонов имён файлов и папок, которые не должны попадать в репозиторий. Например, временные файлы сборки (*.tmp, build/), логи (*.log), локальные настройки разработчика (*.env.local), кэш (node_modules/). Это позволяет поддерживать чистоту репозитория и избегать случайного коммита чувствительных или ненужных данных.
.env — файл окружения, используемый для хранения переменных среды в текстовом виде. Он содержит пары ИМЯ=значение, например:
DATABASE_URL=postgresql://user:pass@localhost:5432/mydb
DEBUG=true
API_KEY=sk-abc123xyz
Файл .env не включается в Git (добавляется в .gitignore), так как содержит данные, специфичные для конкретного развертывания — ключи, пароли, пути, флаги отладки. При запуске приложения переменные из .env загружаются в операционную среду и становятся доступны программе через стандартные механизмы (например, process.env в Node.js или os.getenv() в Python).
Структура кодировки UTF-8
UTF-8 использует последовательности от 1 до 4 байт для представления символов Unicode. Вот подробная таблица:
| Байты | Первый байт (биты) | Второй байт (биты) | Третий байт (биты) | Четвёртый байт (биты) | Диапазон кодовых точек | Максимум символов |
|---|---|---|---|---|---|---|
| 1 | 0xxxxxxx | — | — | — | U+0000 – U+007F | 127 |
| 2 | 110xxxxx | 10xxxxxx | — | — | U+0080 – U+07FF | 1915 |
| 3 | 1110xxxx | 10xxxxxx | 10xxxxxx | — | U+0800 – U+FFFF | 65 535 |
| 4 | 11110xxx | 10xxxxxx | 10xxxxxx | 10xxxxxx | U+10000 – U+10FFFF | 1 048 575 |
Упрощённая структура байтов в UTF-8
Один байт (ASCII)
Биты: 0xxxxxxx
Значение: 0–127 (0x00–0x7F)
Символы: латиница базовая, цифры, знаки препинания
Два байта
Байт 1: 110xxxxx (0xC0–0xDF)
Байт 2: 10xxxxxx (0x80–0xBF)
Диапазон: U+0080 – U+07FF
Макс: 11 + 6 = 16 бит данных
Пример:
| Символ | Unicode | Байты (HEX) | Байты (BIN) |
|---|---|---|---|
| А | U+0410 | D0 A0 | 11010000 10100000 |
| э | U+044D | D1 8D | 11010001 10001101 |
| © | U+00A9 | C2 A9 | 11000010 10101001 |
Три байта
Байт 1: 1110xxxx (0xE0–0xEF)
Байт 2: 10xxxxxx (0x80–0xBF)
Байт 3: 10xxxxxx (0x80–0xBF)
Диапазон: U+0800 – U+FFFF
Макс: 16 + 12 + 6 = 34 бита данных
Пример:
| Символ | Unicode | Байты (HEX) | Байты (BIN) |
|---|---|---|---|
| 😄 | U+1F604 | F0 9F 98 84 | 11110000 10011111 10011000 10000100 |
| 🌍 | U+1F30D | F0 9F 8C 8D | 11110000 10011111 10001100 10001101 |
| α | U+03B1 | CE B1 | 11001110 10110001 |
| 薪 | U+65B0 | E6 96 B0 | 11100110 10010110 10110000 |
Четыре байта (SMP и beyond)
Байт 1: 11110xxx (0xF0–0xF4)
Байт 2: 10xxxxxx (0x80–0xBF)
Байт 3: 10xxxxxx (0x80–0xBF)
Байт 4: 10xxxxxx (0x80–0xBF)
Диапазон: U+10000 – U+10FFFF
Макс: 21 + 18 + 12 + 6 = 57 бит данных