Глава 1. Текстовые документы
Предварительные замечания о работе с текстом
Набор и оформление текста являются самыми распространенными работами, которые выполняются с помощью компьютера. Считается также, что работа с текстом - это одна из самых простых задач. Действительно, что может быть проще - нажимаешь клавишу и на экране появляется буква. Но, как всегда, дьявол скрывается в деталях.
Действительно, существуют программы, которые предназначены только для набора текста. Они так и называются - текстовые редакторы. Такие программы могут иметь некоторые дополнительные функции, как правило весьма скромные в плане оформления текста. Но могут и не иметь. Потому что используются для создания таких файлов, которые не должны содержать ничего кроме чистого текста. Например, это может быть программный код, где нет и не может быть заголовков, абзацев, таблиц или графики.
Текстовые редакторы можно, иногда даже предпочтительно использовать для набора текста на естественном языке. Например, когда мы пишем электронное письмо, то делаем это именно с помощью встроенного редактора текста. В этой главе текстовые редакторы не рассматриваются. Работа в них действительно интуитивно понятна и не содержит каких-то сложностей.
Для более продвинутой работы с текстом чаще всего используется класс программ, которые раньше называли текстовыми процессорами. Это название позаимствовано скорее не от процессора компьютера, а от кухонного процессора. Другими словами, это программа, которая умеет все. Или почти все, что требуется делать с текстом. В последнее время процессорами подобные программы называют все реже, видимо из-за того, что они давно достигли того уровня, который требуется пользователю и уже не вызывают того же восхищения, что и раньше. Да, они почти не развиваются и стали рутинной частью офисного пакета программ, наряду с электронными таблицами, базами данных и другими компонентами. Но это вовсе не делает их менее полезными. Универсальность и простота использования сделали этот класс программного обеспечения очень популярным.
Подобные программы позволяют создавать полноценные документы, имеющие единый стиль оформления и содержащие, кроме собственно текста, вставки в виде таблиц или графики. Одной из таких программ является LibreOffice Writer.
Однако, существуют текстовые документы, требования к оформлению которых еще выше. В первую очередь это материалы, подготовленные к печати в типографии. В этой сфере бал правят электронные издательские системы. Их отличия от офисных программ для работы с текстом будут подробно рассматриваться в соответствующем разделе.
Кодировки
Рассматривая работу с текстом, невозможно не упомянуть о кодировках. Наверное, каждый сталкивался с тем, что иногда текст невозможно прочесть потому, что он состоит из совершенно непонятных знаков вместо букв. Для того, чтобы понять, почему так происходит, надо разобраться в том, что такое кодировки и какие они бывают.
Примеры отображение текста в неверной кодировке.
Под кодировкой в данном случае понимается способ представления текстовых знаков (букв, цифр, знаков препинания и пунктуации, спецсимволов) при обработке их в компьютере. Для такого представления используются только цифры 0 и 1. Это напоминает идею азбуки Морзе, где символы закодированы точками и тире.
К примеру, в кодировке ASCII латинской букве "А" (прописной) соответствует код 1000001, латинской букве "a" (строчной) - 1100001. ASCII (American Standard Code for Information Interchange, американская стандартная кодировочная таблица) - это стандартная кодировка для использования в телетайпах. Практически без изменения ее стали использовать и в компьютерах. Как видно, разрядность оригинальной ASCII равна 7 бит. Это позволяет закодировать 128 символов, что поначалу вполне устраивало. В такой таблице поместился весь латинский алфавит (прописные и строчные буквы), цифры, знаки препинания и управляющие символы. Последние нужны для обозначения перевода строки и других служебных целей.
Почти сразу кодировку ASCII расширили и сделали 8-битной. Теперь она имела емкость 256 символов. Причем, первые 128 остались без изменения. Это позволило внести в таблицу дополнительные знаки вроде "©", "§" и других. Такую ASCII называют еще кодировкой DOS, так как именно она использовалась в операционной системе MS DOS, установленной на первых персональных компьютерах IBM PC. Но использовать такую кодировку для языков с алфавитом, отличным от латинского по-прежнему было невозможно. Даже латинский алфавит в некоторых языках может содержать буквы, которых нет в кодировке DOS, например, буквы с умляутом (такая крышечка сверху).
Решили эта проблему просто. Дополнительные 128 кодов кодировки ASCII отдали под буквы национальных алфавитов. При этом потребовалось добавить переключатель языка ввода на клавиатуре. В одном положении переключателя можно было набирать знаки стандартной ASCII, а в другом - буквы из верхнего пространства таблицы. Для разных языков таблицы были разные. Подобные кодировки называются альтернативными кодировками DOS, а применительно к IBM PC закрепился термин кодовые страницы (code page, сокращенно CP). Кириллица для русского языка имеет обозначение CP866.
Все это было не очень удобно. Поэтому постепенно, как грибы после дождя, стали появляться (или уже существовали к этому времени) другие 8-битные кодировки. О совместимости никто, похоже, не думал.
Еще в семидесятых годах появилась кодировка KOI8 (Код Обмена Информации Восьмибитный). Она получила статус национального стандарта ГОСТ 19 768-74. Примерно до 2007 года KOI8 являлась основной для серверов и рабочих станций, работающих на UNIX-подобных операционных системах в России.
Компания Microsoft скорее всего имела возможность добавить поддержку KOI8 в свои продукты, но как всегда, пошла другим путем и ввела кодировку CP1251 собственной разработки как стандарт для операционной системы Windows.
Существует кодировка кириллицы под названием ISO-8859-5, разработанная Комитетом по международным стандартам (International Standards Organization, ISO). Она оказалась неудачной и не получила широкого распространения.
Здесь перечислены только самые известные, но были и другие кодировки кириллицы. К этому моменту обмен текстовой информацией был уже сильно затруднен - неразбериха с кодировками достигла критических размеров. Такая ситуация сложилась не только с кириллицей, но и с другими национальными алфавитами. Выход был предложен - Юникод (Unicode).
Цель Юникода состоит в объединении всех существующих на Земле национальные алфавитов в одну кодовую таблицу. Понятно, что эта таблица уже не будет 8-битной. Наиболее известны два подхода, оба закреплены в качестве международного стандарта.
Первый называется UTF-8 (Unicode Transformation Format 8-bit, Формат Преобразования Юникода 8-битный). Известна дата рождения этой кодировки и ее авторы - 2 сентября 1992 года, Кен Томпсон и Роберт Пайк. Размер символа в кодировке UTF-8 может быть от 1 до 6 байт (на практике не больше 4). Другими словами это кодировка с переменной длиной символа, что позволяет несколько сэкономить на времени обмена информацией и месте для хранения символьных данных.
В UTF-8 символы латинского алфавита, знаки препинания и управляющие символы являются уже знакомой таблицей ASCII. Все остальные символы кодируются как многобайтные. Как следствие, латинские буквы, цифры и знаки препинания будут отображаться всегда правильно.
Второй подход получил название UTF-16. Размер символа в кодировке UTF-16 всегда составляет 2 байта, т.е. 16 бит. К сожалению, UTF-16, в отличие от UTF-8, не является самосинхронизирующейся кодировкой. При потере одного байта последующие байты будут раскодированы некорректно.
Существует также стандарт UTF-32, но он не получил широкого распространения из-за низкой эффективности поиска символов в таблице и использования пространства для хранения данных.
Юникод позволяет упаковать в единую кодовую таблицу все известные на сегодняшний день символы, включая символы древних и мертвых языков. В настоящее время таблица уже содержит более 100 тысяч символов.
К сожалению, полностью проблему некорректного отображения текста не решил даже Юникод. Трудность, как всегда, состоит в том, чтобы договориться. В операционных системах на основе Linux состоялся практически полный переход на UTF-8. В Windows разных версий декларирована совместимость с UTF-16, но на самом деле используется и CP1251, и даже местами CP866. Кроме того, в Интернете, в электронных архивах и на компьютерах пользователей имеется множество старых или неправильно составленных текстовых материалов, в которых можно встретить какую угодно кодировку.
Обычно текстовые документы удается гарантированно правильно прочитать, если использовать те программы, в которых они были созданы. В сложных случаях можно применить конвертеры кодировок, которых имеется довольно много для разных ситуаций. В Интернете есть on-line сервисы, которые решают эту же задачу.