Перевод строки
Перевод строки — это элемент форматирования текста, обозначающий переход на новую строку. В зависимости от контекста (письменность, типографика, компьютерные технологии) перевод строки может быть реализован как графический приём (перенос текста на следующую строку), так и как специальный управляющий символ или последовательность символов, используемых в цифровых данных. Основная функция перевода строки — разделение текста на логические блоки (строки, абзацы, стихи) или управление его отображением.
История
Ручной набор и пишущие машинки
В допечатную эпоху и в период ручного набора (типографского) перевод строки был физическим действием: наборщик вручную перемещал каретку или литеру. С изобретением пишущей машинки в XIX веке появился механизм возврата каретки (Carriage Return, CR) — рычаг, который сдвигал бумагу влево и одновременно переводил каретку на новую строку. В некоторых моделях для этого требовалось два действия: сначала возврат каретки, затем перевод строки (Line Feed, LF) — прокрутка валика на одну строку вверх. Эти механические операции легли в основу цифровых кодов управления.
Электронные и компьютерные системы
С развитием телетайпов и первых компьютерных терминалов в 1960-х годах возникла необходимость в стандартизации управляющих символов. Американский стандарт ASCII (1963 год) определил два кода: CR (Carriage Return, код 13) и LF (Line Feed, код 10). Однако разные производители и операционные системы использовали их по-разному:
- Системы на базе Unix и Linux (включая macOS после версии 10) — используют только LF (код 10).
- Системы семейства Windows (и MS-DOS) — используют последовательность CR+LF (коды 13 и 10).
- Классическая Mac OS (до версии 9) — использовала только CR (код 13).
Эта несовместимость сохраняется до сих пор, вызывая проблемы при переносе текстовых файлов между разными платформами (например, при открытии файла, созданного в Windows, в текстовом редакторе Linux могут отображаться символы «^M»).
Виды и классификация
По способу реализации
- Физический (механический) перевод строки — осуществляется в печатных устройствах (принтерах, пишущих машинках) путём перемещения бумаги или печатающей головки.
- Визуальный (графический) перевод строки — в системах вёрстки и текстовых процессорах (Microsoft Word, Adobe InDesign) строка переносится автоматически при достижении правой границы поля (автоматический перенос) или вручную (принудительный разрыв строки).
- Цифровой (программный) перевод строки — реализуется с помощью управляющих символов (CR, LF, CR+LF) или специальных тегов в разметке (например,
<br>в HTML,\nв языках программирования).
По типу использования
- Жёсткий перевод строки — вставляется автором или редактором принудительно (например, в стихах, адресах, списках). При изменении ширины окна или шрифта такие строки не переформатируются автоматически.
- Мягкий перевод строки — генерируется программой автоматически при переносе текста на новую строку в пределах абзаца. При изменении параметров форматирования (ширина окна, размер шрифта) мягкие переносы пересчитываются заново.
Техническая реализация
Управляющие символы
В современных компьютерных системах перевод строки кодируется одним или двумя байтами:
- LF (Line Feed, «\n», код 0x0A) — переводит курсор на следующую строку без изменения горизонтальной позиции. Используется в Unix-подобных системах, Linux, macOS, а также в большинстве языков программирования как универсальный символ новой строки.
- CR (Carriage Return, «\r», код 0x0D) — возвращает курсор в начало текущей строки. В классической Mac OS использовался как единственный символ перевода строки.
- CR+LF («\r\n», коды 0x0D 0x0A) — последовательность, принятая в Windows, MS-DOS, а также в протоколах интернета (HTTP, SMTP, FTP).
Особенности в разных средах
- Текстовые редакторы (Notepad++, Visual Studio Code, Vim) обычно автоматически определяют тип перевода строки и могут конвертировать его. В Windows Notepad (до версии Windows 10) не распознавал строки с LF без CR, что приводило к отображению всего текста одной строкой.
- Веб-технологии: в HTML перевод строки в исходном коде (кроме тега
<br>) игнорируется браузером — пробелы и переносы схлопываются в один пробел. Для отображения переноса используется тег<br>или блочные элементы (например,<p>,<div>). - Языки программирования: в большинстве языков (C, C++, Java, Python, JavaScript) символ
\nобозначает перевод строки, но при записи в файл на Windows он может автоматически заменяться на\r\n(например, в C при открытии файла в текстовом режиме).
Применение
В типографике и вёрстке
В профессиональной вёрстке (книги, газеты, журналы) перевод строки регулируется правилами переноса слов (слогового переноса) и выключки (выравнивания). Автоматический перенос строки в абзацах выполняется с учётом словарных правил, запрета на разрыв отдельных слов (например, аббревиатур) и висячих строк. Принудительный перевод строки (жёсткий) используется в стихах, заголовках, подписях к рисункам.
В программировании и обработке данных
Перевод строки является ключевым элементом при разборе текстовых файлов (парсинге), работе с логами, передаче данных по сети. В протоколах, таких как HTTP, каждая строка заголовка завершается последовательностью CR+LF. В базах данных перевод строки может храниться как часть строки, что требует экранирования при импорте/экспорте (например, в CSV-файлах).
В пользовательских интерфейсах
В текстовых полях, мессенджерах, редакторах кода перевод строки выполняется нажатием клавиши Enter (или Shift+Enter для мягкого переноса). В некоторых системах (например, в командной строке) перевод строки используется для завершения ввода команды.
Проблемы и особенности
Несовместимость платформ
Различие в символах перевода строки (CR+LF в Windows против LF в Unix) является одной из самых частых причин ошибок при работе с текстовыми файлами. Для решения этой проблемы существуют утилиты (например, dos2unix и unix2dos в Linux), а также настройки в текстовых редакторах и системах контроля версий (Git может автоматически конвертировать переводы строк).
Висячие строки
В типографике висячей строкой называют одну строку абзаца, оставшуюся на предыдущей странице (или в начале следующей). Это считается дефектом вёрстки, и для его устранения применяют принудительный перевод строки или изменение межсловных интервалов.
Символы-невидимки
В некоторых редакторах (например, в Microsoft Word) перевод строки может отображаться как специальный символ (¶), что помогает пользователю контролировать форматирование. В коде же символы CR и LF не видны, что может затруднять отладку.
Интересные факты
- В стандарте ASCII коды CR и LF были заимствованы из телеграфных протоколов XIX века, где они управляли движением печатающей головки.
- В некоторых языках программирования (например, в Python) при чтении текстового файла в режиме «r» (текстовый) перевод строки автоматически нормализуется до
\n, независимо от исходной платформы. - В эпоху телетайпов и первых компьютеров (например, Teletype Model 33) последовательность CR+LF занимала около 0,2 секунды, что было заметно при быстрой печати.
Источники
- ASCII standard (ANSI X3.4-1963, 1968)
- Документация GNU Coreutils (утилиты dos2unix, unix2dos)
- Спецификация HTML5 (W3C, раздел 4.5.2 — «The br element»)
- Книга: «The Unicode Standard, Version 14.0» (Chapter 5, «Line Breaking Properties»)
- Статья: «Newline» в Wikipedia (англ.) — версия от 10.10.2023
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →