Текстовый файл (иногда пишется как textfile ; старое альтернативное название — flat file ) — это разновидность компьютерного файла , который структурирован как последовательность строк электронного текста . Текстовый файл существует и хранится как данные в файловой системе компьютера .
В операционных системах, таких как CP/M , где операционная система не отслеживает размер файла в байтах, конец текстового файла обозначается размещением одного или нескольких специальных символов, известных как маркер конца файла (EOF), в качестве заполнения после последней строки текстового файла. В современных операционных системах, таких как DOS , Microsoft Windows и Unix-подобных системах, текстовые файлы не содержат никаких специальных символов EOF, поскольку файловые системы в этих операционных системах отслеживают размер файла в байтах.
Некоторые операционные системы, такие как Multics , Unix-подобные системы, CP/M, DOS, классическая Mac OS и Windows, хранят текстовые файлы как последовательность байтов с разделителем конца строки в конце каждой строки. Другие операционные системы, такие как OpenVMS и OS/360 и их последователи , имеют файловые системы, ориентированные на записи , в которых текстовые файлы хранятся как последовательность записей фиксированной длины или записей переменной длины со значением длины записи в заголовке записи.
«Текстовый файл» относится к типу контейнера, тогда как простой текст относится к типу содержимого.
На общем уровне описания существует два вида компьютерных файлов: текстовые файлы и двоичные файлы . [1]
Из-за своей простоты текстовые файлы обычно используются для хранения информации. Они избегают некоторых проблем, встречающихся в других форматах файлов, таких как порядок байтов , байты заполнения или различия в количестве байтов в машинном слове . Кроме того, когда происходит повреждение данных в текстовом файле, часто проще восстановить и продолжить обработку оставшегося содержимого. Недостатком текстовых файлов является то, что они обычно имеют низкую энтропию , что означает, что информация занимает больше места, чем строго необходимо.
Простой текстовый файл может не нуждаться в дополнительных метаданных (кроме знания его набора символов ), чтобы помочь читателю в интерпретации. Текстовый файл может вообще не содержать данных, что является случаем файла с нулевым байтом .
Набор символов ASCII является наиболее распространенным совместимым подмножеством наборов символов для текстовых файлов на английском языке и, как правило, считается форматом файла по умолчанию во многих ситуациях. Он охватывает американский английский, но для знака британского фунта , знака евро или символов, используемых за пределами английского языка, необходимо использовать более богатый набор символов. Во многих системах он выбирается на основе настроек локали по умолчанию на компьютере, на котором он читается. До UTF-8 это были традиционно однобайтовые кодировки (например, ISO-8859-1 по ISO-8859-16 ) для европейских языков и широкие кодировки символов для азиатских языков.
Поскольку кодировки обязательно имеют только ограниченный набор символов, часто очень маленький, многие из них пригодны только для представления текста на ограниченном подмножестве человеческих языков. Unicode — это попытка создать общий стандарт для представления всех известных языков, и большинство известных наборов символов являются подмножествами очень большого набора символов Unicode. Хотя для Unicode доступно несколько кодировок символов, наиболее распространенной является UTF-8 , преимущество которой в том, что она обратно совместима с ASCII; то есть каждый текстовый файл ASCII также является текстовым файлом UTF-8 с идентичным значением. UTF-8 также имеет то преимущество, что она легко определяется автоматически . Таким образом, распространенный режим работы программного обеспечения, поддерживающего UTF-8, при открытии файлов неизвестной кодировки — сначала попробовать UTF-8 и вернуться к устаревшей кодировке, зависящей от локали, когда она определенно не является UTF-8.
В большинстве операционных систем имя текстовый файл относится к формату файла, который допускает только простой текстовый контент с очень небольшим форматированием (например, без жирного или курсивного шрифта). Такие файлы можно просматривать и редактировать на текстовых терминалах или в простых текстовых редакторах . Текстовые файлы обычно имеют тип MIMEtext/plain
, как правило, с дополнительной информацией, указывающей на кодировку.
DOS и Microsoft Windows используют общий формат текстового файла, в котором каждая строка текста разделяется комбинацией из двух символов: возврат каретки (CR) и перевод строки (LF). Последняя строка текста обычно не завершается маркером CR-LF, и многие текстовые редакторы (включая Notepad ) не вставляют его автоматически в последнюю строку.
В операционных системах Microsoft Windows файл считается текстовым, если суффикс имени файла ( расширение имени файла ) — .txt
. Однако для текстовых файлов со специальными целями используются и многие другие суффиксы. Например, исходный код компьютерных программ обычно хранится в текстовых файлах, имеющих суффиксы имени файла, указывающие на язык программирования , на котором написан исходный код.
Большинство текстовых файлов Microsoft Windows используют кодировки ANSI, OEM, Unicode или UTF-8. То, что в терминологии Microsoft Windows называется «кодировками ANSI», обычно представляет собой однобайтовые кодировки ISO/IEC 8859 (т. е. ANSI в меню Microsoft Notepad на самом деле является «системной кодовой страницей», не-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 [2] , чтобы отличать кодировку UTF-8 от других 8-битных кодировок. [3]
В операционных системах типа Unix формат текстовых файлов описан точно: POSIX определяет текстовый файл как файл, содержащий символы, организованные в ноль или более строк, [4] где строки представляют собой последовательности из нуля или более символов, не являющихся символами новой строки, плюс завершающий символ новой строки, [5] обычно LF.
Кроме того, POSIX определяетпечатный файл как текстовый файл, символы которого печатаются или пробел или возврат на одну позицию в соответствии с региональными правилами. Это исключает большинство управляющих символов, которые не печатаются.[6]
До появления macOS классическая система Mac OS считала содержимое файла (ветвь данных) текстовым файлом, когда ее ветвь ресурсов указывала, что тип файла — «TEXT». [7] Строки классических текстовых файлов Mac OS завершались символами CR. [8]
Будучи Unix-подобной системой, macOS использует формат Unix для текстовых файлов. [8] Единый идентификатор типа (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. [7]
При открытии текстовым редактором пользователю представляется читаемый человеком контент. Часто он состоит из обычного текста файла, видимого пользователю. В зависимости от приложения управляющие коды могут отображаться либо как буквальные инструкции, выполняемые редактором, либо как видимые экранированные символы , которые можно редактировать как обычный текст. Хотя в текстовом файле может быть обычный текст, управляющие символы внутри файла (особенно символ конца файла) могут сделать обычный текст невидимым с помощью определенного метода.
Да, UTF-8 может содержать BOM. Однако это
не
имеет значения относительно порядка байтов в потоке байтов. UTF-8 всегда имеет один и тот же порядок байтов. Начальный BOM используется только в качестве подписи — указания на то, что в противном случае немаркированный текстовый файл находится в UTF-8. Обратите внимание, что некоторые получатели данных в кодировке UTF-8 не ожидают BOM. Если UTF-8 используется
прозрачно
в 8-битных средах, использование BOM будет мешать любому протоколу или формату файла, который ожидает определенные символы ASCII в начале, например, использование "#!" в начале сценариев оболочки Unix.