Введение

Текстовый файл (иногда пишется textfile; старое альтернативное название – flatfile) – это тип компьютерного файла, структурированный как последовательность строк электронного текста. Текстовый файл существует в виде данных в файловой системе компьютера. В операционных системах, таких как CP/M и DOS, где операционная система не отслеживает размер файла в байтах, конец текстового файла обозначается добавлением одного или нескольких специальных символов, известных как маркер конца файла (EOF), в качестве дополнения после последней строки. В современных операционных системах, таких как Microsoft Windows и Unix-подобных системах, текстовые файлы не содержат специального символа EOF, поскольку файловые системы в этих операционных системах отслеживают размер файла в байтах. Большинству текстовых файлов требуются разделители конца строки, которые реализуются различными способами в зависимости от операционной системы. Некоторые операционные системы с файловыми системами, ориентированными на записи, могут не использовать разделители новой строки и будут преимущественно хранить текстовые файлы, где строки разделены записями фиксированной или переменной длины. "Текстовый файл" обозначает тип контейнера, а "обычный текст" – тип содержимого. В общем описании существует два типа компьютерных файлов: текстовые и бинарные.

Хранение данных

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

Кодирование

Набор символов ASCII является наиболее распространенным совместимым подмножеством наборов символов для текстовых файлов на английском языке и обычно предполагается как формат файла по умолчанию во многих ситуациях. Он охватывает американский английский, но для знака британского фунта, знака евро или символов, используемых вне английского языка, требуется более богатый набор символов. Во многих системах выбор кодировки определяется настройками локали по умолчанию на компьютере, на котором файл открывается. До появления UTF-8 традиционно использовались однобайтовые кодировки (например, ISO 8859-1 – ISO 8859-16) для европейских языков и кодировки с широкими символами для азиатских языков. Поскольку кодировки неизбежно имеют ограниченный репертуар символов, зачастую очень небольшой, многие из них пригодны лишь для представления текста на ограниченном числе языков. Unicode – это попытка создать единый стандарт для представления всех известных языков, и большинство известных наборов символов являются подмножествами обширного набора символов Unicode. Хотя для Unicode существует несколько кодировок символов, наиболее распространенной является UTF-8, которая обладает преимуществом обратной совместимости с ASCII; то есть любой текстовый файл в кодировке ASCII также является текстовым файлом UTF-8 с тем же содержанием. UTF-8 также легко определяется автоматически. Поэтому типичный режим работы программного обеспечения, поддерживающего UTF-8, при открытии файлов с неизвестной кодировкой, заключается в том, чтобы сначала попытаться открыть файл как UTF-8, а если это не удается, использовать устаревшую кодировку, зависящую от локали.

Форматы

В большинстве операционных систем термин "текстовый файл" относится к формату файла, который позволяет хранить только обычный текст с минимальным форматированием (например, без полужирного или курсивного начертания). Такие файлы можно просматривать и редактировать в текстовых терминалах или простых текстовых редакторах. Текстовые файлы обычно имеют MIME-тип text/plain, как правило, с дополнительной информацией об используемой кодировке.

Текстовые файлы Microsoft Windows

DOS и Microsoft Windows используют общий формат текстового файла, при котором каждая строка текста разделяется комбинацией из двух символов: возврата каретки (CR) и перевода строки (LF). Обычно последняя строка текста не завершается маркером CR LF, и многие текстовые редакторы (включая Блокнот) не вставляют его автоматически в конце последней строки. В операционных системах Microsoft Windows файл считается текстовым, если расширение имени файла имеет вид ".txt". Однако для текстовых файлов с определенным назначением используются и другие расширения. Например, исходный код компьютерных программ обычно хранится в текстовых файлах, расширения которых указывают на язык программирования, на котором написан этот код. Большинство текстовых файлов Microsoft Windows используют кодировки ANSI, OEM, Unicode или UTF-8. То, что в терминологии Microsoft Windows называется "кодировками ANSI", как правило, представляет собой однобайтовые кодировки ISO/IEC 8859 (то есть "ANSI" в меню Блокнота Microsoft на самом деле является "системной кодовой страницей", кодировкой, не поддерживающей Unicode, устаревшей кодировкой), за исключением локалей, таких как китайский, японский и корейский, которым требуются двухбайтовые наборы символов. Кодировки ANSI традиционно использовались в качестве локалей системы по умолчанию в Microsoft Windows до перехода на Unicode. В отличие от них, кодировки OEM, также известные как кодовые страницы DOS, были определены компанией IBM для использования в оригинальной системе отображения текста IBM PC. Они обычно включают графические символы и символы для рисования линий, часто используемые в приложениях DOS. Текстовые файлы Microsoft Windows с кодировкой "Unicode" содержат текст в формате преобразования Unicode UTF-16. Такие файлы обычно начинаются с маркера порядка байтов (BOM), который указывает порядок следования байтов в файле. Хотя UTF-8 не имеет проблем с порядком следования байтов, многие программы Microsoft Windows (например, Блокнот) добавляют в начало файлов, закодированных в UTF-8, маркер BOM, чтобы отличать кодировку UTF-8 от других 8-битных кодировок.

Текстовые файлы Unix

В операционных системах, подобных Unix, формат текстовых файлов чётко определён: POSIX определяет текстовый файл как файл, содержащий символы, организованные в ноль или более строк, где каждая строка представляет собой последовательность из нуля или более символов, отличных от символа новой строки, плюс завершающий символ новой строки, обычно LF. Кроме того, POSIX определяет текстовый файл как файл, чьи символы являются печатными, пробельными или символами возврата на предыдущую позицию в соответствии с региональными настройками. Это исключает большинство управляющих символов, которые не являются печатными.

Текстовые файлы Apple Macintosh

До появления macOS классическая система Mac OS считала содержимое файла (форк данных) текстовым файлом, если ресурсный форк указывал, что тип файла — "TEXT". Строки классических текстовых файлов Mac OS завершаются символами возврата каретки (CR). Являясь системой, подобной Unix, macOS использует формат Unix для текстовых файлов. Унифицированный идентификатор типа (UTI), используемый для текстовых файлов в macOS, — "public.plain-text"; дополнительные, более специфичные UTI: "public.utf8-plain-text" для текста в кодировке UTF-8, "public.utf16-external-plain-text" и "public.utf16-plain-text" для текста в кодировке UTF-16 и "com.apple.traditional-mac-plain-text" для классических текстовых файлов Mac OS.

Рендаринг

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