13.1. Представление текстаЕстественной для органов чувств человека является аналоговая форма представления информации, однако дискретная форма представления с помощью некоторого набора знаков наиболее универсальная. Для записи текста используют символы алфавита (пример 13.1). Представление информации в алфавитной (текстовой) форме — самый распространенный способ со времен изобретения письменности. Информация передается в виде текста, записанного на каком-либо языке: русском, белорусском и т. д. Для записи текста на разных языках можно использовать один алфавит. Например, для записи текста на русском или белорусском языках используют кириллицу, а для записи текста на английском или немецком языках — латиницу. Для записи текста в память компьютера используют двоичный код — алфавит из двух символов: 0 и 1. 13.2. Понятие кодовой таблицы Текстовая информация состоит из символов: букв, цифр, знаков препинания и др. Множество этих символов образуют компьютерный алфавит. Текст, состоящий из данных символов, человек видит на экране монитора. Компьютер может обрабатывать информацию только в числовой форме, представленной в виде двоичного кода. Поэтому для кодирования текста каждому символу алфавита ставят в соответствие двоичный код (пример 13.2). Часто всем знакам алфавита ставятся в соответствие коды, содержащие одинаковое число двоичных разрядов.
С помощью кодовых таблиц выполняют кодирование и декодирование текста. Часто для удобства пользователя в кодовых таблицах вместо двоичного кода записывается его десятичный или шестнадцатеричный аналог (пример 13.3). Для получения двоичного кода (из десятичного или шестнадцатеричного) нужно осуществить перевод числа в двоичную систему счисления. Для разных компьютерных систем могут использоваться различные кодовые таблицы символов. В разных кодовых таблицах одним и тем же символам ставится в соответствие разный двоичный код (пример 13.4). В этом случае текст, созданный на одном компьютере, нельзя будет прочитать на другом компьютере без дополнительного перекодирования — символы будут отображаться некорректно (пример 13.5). Международным стандартом стала таблица кодировки ASCII (American Standard Code for Information Interchange — американский стандартный код для обмена информацией). Данная таблица поддерживает 8-разрядный двоичный код. Это значит, что каждый символ будет закодирован последовательностью из 8 нулей и единиц. Такая последовательность и будет кодом символа. Всего в таблице 28 = 256 символов. Так как каждый символ кодируют последовательностью из 8 нулей и единиц, он занимает в памяти компьютера 8 бит (1 байт). В примерах 13.6—13.9 показано, как с помощью таблицы символов ASCII (см. Приложение к главе 2, с. 118—119) кодировать и декодировать символы. В таблице ASCII символы латинского и русского алфавитов (прописные и строчные) идут по алфавиту. Десятичные цифры расположены в порядке возрастания их числовых значений. Это правило обычно соблюдается и в других кодовых таблицах. Такой способ кодирования текста позволяет сортировать текстовые данные по алфавиту, а числовые — по возрастанию их значений. В кодовой таблице ASCII хранится 256 символов. Если нужно работать с текстами сразу на нескольких языках, то этих символов недостаточно. Сейчас широко используют кодировку Unicode (Юникод). В ней компьютерный алфавит состоит не из 256, а из 65 536 символов. Для кодирования одного символа используется последовательность из 0 и 1, имеющая длину 16 символов. При такой кодировке каждый символ будет занимать в памяти компьютера 2 байта. Просмотреть кодовую таблицу на вашем компьютере можно запустив программу Таблица символов (находится в разделе Стандартные Служебные Таблица символов). Для определения кода символа нужно выбрать этот символ в таблице (пример 13.10). На всплывающей подсказке и в нижней части окна будет указан код символа в шестнадцатеричной системе счисления и название данного символа (на английском языке). Для поиска символа, соответствующего какому-либо коду, нужно ввести шестнадцатеричный код символа в поле Поиск. В выпадающем списке Набор символов можно выбрать определенный алфавит. Стандартная часть кодовой таблицы ASCII совпадает с началом таблицы кодировки Unicode. Поэтому тексты, содержащие символы, которые расположены в стандартной части кодовой таблицы ASCII (цифры, буквы английского алфавита), будут без труда читаться и в кодировке Unicode. Русские символы в таблице ASCII имеют коды, начиная с числа 8016 = = 12810, а в таблице Unicode — с шестнадцатеричного числа 0410 (код прописной буквы А). Тексты на русском языке, набранные в кодировке ASCII, будут неверно отображаться при просмотре в Unicode (пример 13.11). Для правильного просмотра текст необходимо преобразовать. Распространена кодировка UTF-8 (англ. Unicode Transformation Format, 8-bit — формат преобразования Юникода, 8 бит). Она позволяет более компактно хранить и передавать символы, используя переменное количество байт (от 1 до 4) для кодирования. Стандарт UTF-8 сейчас является самым распространенным в Интернете. Латинские буквы, цифры и наиболее распространенные знаки препинания кодируются в UTF-8 одним байтом, и коды этих символов соответствуют их кодам в ASCII. Кириллические символы кодируются двумя байтами (пример 13.12). Структуру двоичного кода символа в кодировке UTF-8 можно посмотреть в Приложении к главе 2 (с. 117). Тексты вводятся в память компьютера в основном с помощью клавиатуры. На клавишах написаны знакомые нам буквы, цифры, знаки препинания и другие символы. Нажатие на определенную клавишу кодирует символ, и в памяти компьютера он хранится в форме двоичного кода. При выводе символа на экран монитора внешний вид символа восстанавливается по его двоичному коду. Кодирование и декодирование текстовых данных происходит также при записи текста в файл на компьютерный носитель и при считывании текста из файла (пример 13.13). Информационный объем текста зависит от количества символов в нем и способа кодирования символов. Информационный вес одного символа равен 1 байту при использовании однобайтных (8-битных) кодовых таблиц и 2 байтам при использовании таблицы Unicode. При использовании таблицы UTF-8 информационный вес одного символа может составлять от 1 до 4 байт. 13.3. Решение задач на кодирование текста Пример 13.14. Определить информационный объем следующего предложения, если его закодировали с помощью кодовой таблицы Unicode: Программирование — вторая грамотность. Пример 13.15. Автоматическое устройство осуществило перекодировку сообщения из кодировки Unicode в кодировку ASCII. При этом информационный объем сообщения уменьшился на 12 байт. Сколько бит было в первоначальном сообщении? Пример 13.16. Информационный объем сообщения 8,5 Кбайт. Данное сообщение содержит 8704 символа. Какое максимально возможное количество символов содержится в алфавите? Пример 13.17*. Автоматическое устройство осуществило перекодировку сообщения, содержащего символы русского и латинского алфавитов из кодировки UTF-8 в 16-битный Unicode. (Символы латинского алфавита кодируются одним байтом, а русского — двумя байтами.) В результате преобразования сообщение стало занимать 21 Кбайт вместо первоначальных 15 Кбайт. Сколько в сообщении символов русского алфавита? Пример 13.18. Текст рассказа занимает 80 Кбайт. На одной странице 30 строк по 45 символов. Каждый символ кодируется 16 битами в формате Unicode. Сколько страниц в рассказе? |
Пример 13.4. Кодирование буквы «Л» (русской) в разных 8-разрядных кодовых таблицах. Пример 13.5. Текст в разных кодировках. Windows 1251 Пример текста в разных кодировках КОИ-8 оПХЛЕП РЕЙЯРЮ Б ПЮГМШУ ЙНДХПНБЙЮУ CP866 —ЕшьхЕ ЕхъеЕр т Ерчэ^1 ъюфшЕютър! Таблица ASCII кодов состоит из двух частей. Первая часть (стандартная) содержит латинские буквы, цифры, пробел, знаки препинания и специальные символы: +, /, *, %, # и др. Символы этой части имеют коды от 00000000 до 01111111 (десятичные аналоги 0—127). Вторую часть кодовой таблицы называют альтернативной. Символы в ней кодируются значениями от 10000000 до 11111111 (десятичные аналоги 128—255). Эта часть таблицы используется для кодирования символов национальных алфавитов и символов псевдографики, которые используются для рисования рамок и линий (символы с кодами 176—223). В стандартной части кодовой таблицы коды всех символов начинаются с 0, в альтернативной — с 1. Пример 13.6. Определение кода символа «@». Номер символа «@» в кодовой таблице 64. Переведем число 64 из десятичной системы счисления в двоичную. Получим: 1000000. Для получения 8-битного кода добавим 0 перед числом. 01000000 — двоичный код символа «@». Пример 13.7. Определение кода символа «Ф». Слева от буквы «Ф» число 148 — ее десятичный код. Переведем число 148 в двоичную систему счисления. Получим 10010100 — двоичный код буквы «Ф». Пример 13.8. Определение для символа «Z» шестнадцатеричного кода. Найдем в таблице букву «Z». Рядом с ней число 90. Переведем десятичное число 90 в шестнадцатеричную систему счисления. Получим: 5А. Пример 13.9. Декодирование последовательности кодов символов. 10101000 10101101 11100100 10101110 11100000 10101100 10100000 11100010 10101000 10101010 10100000 Заменим каждый двоичный код его десятичным аналогом и получим: 168 173 228 174 224 172 160 226 168 170 160 Теперь в кодовой таблице найдем соответствующие символы и получим: информатика Пример 13.10. Таблица символов (фрагмент). Пример 13.11. Кодирование слова «диск». В кодировке ASCII слову «диск» соответствует последовательность шестнадцатеричных кодов: A4 A8 E1 AA (в десятичном представлении: 164 189 225 170). Этой последовательности кодов в кодировке Unicode будут соответствовать символы: И”аа. В кодировке Unicode слово «диск» будет закодировано последовательностью шестнадцатеричных кодов: 0434 0438 0441 043A. Формат UTF-8 был разработан 2 сентября 1992 г. Кеном Томпсоном и Робом Пайком и реализован в ОС Plan 9 (Операционная система, разработанная Bell Labs — сейчас подразделение Nokia — в конце 1980-х гг. с расчетом на сети и рабочие станции). Эта кодировка нашла широкое применение в UNIX-подобных ОС. Многие браузеры предоставляют пользователю возможность выбора кодировки страницы сайта. Однако распространение кодировки UTF-8 приводит к тому, что эта функция становится маловостребованной. По этой причине разработчики Google Chrome убрали данную функцию из последних версий браузера. Пример 13.12. Кодирование символов в UTF-8 и Unicode. Пример 13.13. Преобразование кодировки текстового документа при его открытии в Word: Пример 13.14. В кодировке Unicode каждый символ кодируется 2 байтами. Нужно подсчитать количество символов в предложении и умножить на 2. В предложении 38 символов. Информационный объем — 38 • 2 = 76 байт. Пример 13.15. В кодировке Unicode каждый символ кодируется 2 байтами, в кодировке ASCII — 1 байтом. При перекодировке информационный объем уменьшился в 2 раза. Значит, исходный размер сообщения — 12 • 2 = 24 байта, 24 • 8 = 192 бит. Пример 13.16. Информационный объем сообщения 8,5 Кбайт = 8,5 • 1024 = 8704 байта. Одному символу сообщения соответствует 1 байт = 8 бит. С помощью 8 бит можно закодировать 28 = 256 символов. Пример 13.17*. В Unicode каждый символ кодируется 2 байтами, поэтому в сообщении (21 • 1024)/2 = 10752 символов. Если бы все символы в сообщении были латинскими, то информационный объем сообщения в кодировке UTF-8 составил бы 10752 байта. Информационный объем сообщения до перекодирования — 15 Кбайт = 15 • 1024 = 15360 байт. 15360 — 10752 = 4608 — количество символов русского алфавита. Пример 13.18. На одной странице 30 • 45 = 1350 символов. В кодовой таблице Unicode один символ кодируется 2 байтами. Информационный объем одной страницы — 1350 • 2 = 2700 байт. Весь рассказ занимает 80 • 1024 = 81 920 байт. Тогда количество страниц составляет 81920/2700 = 30,34 = 31 страница. |
1. Что такое алфавит? 2. Как кодируются символы? 3. Чем отличается кодирование текста при использовании разных кодовых таблиц? 4. Как определить код символа в приложении Таблица символов?
Упражнения
1. Используя кодовую таблицу ASCII или Unicode (программа Таблица символов), закодируйте следующие текстовые данные:
Файл | Байт |
Кодирование | Disk |
Printer | Bit |
Система счисления |
2. Декодируйте двоичный код, используя кодовую таблицу ASCII.
11101000 10101010 10101110 10101011 10100000
3. Декодируйте информацию, используя таблицу ASCII.
172 174 164 165 172 (десятичные числа).
E1 AA A0 AD E0 (шестнадцатеричные числа).
4. Используя программу Таблица символов, определите коды символов 1/2, ±, $, Щ, Ў.
5. Определите информационный объем сообщения «Участник олимпиады может писать программы на языках программирования Pascal, Python или С++».
1.В кодировке ASCII.
2.В кодировке Unicode.
3*.В кодировке UTF-8.
6. Сообщение, информационной объем которого в 16-битной кодировке равен 480 байт, перекодировали в 8-битную кодировку. После этого к сообщению дописали несколько символов, и его информационный объем стал равен 520 байт. Сколько символов дописали в сообщение?
7. Алфавит племени Тумба-Юмба состоит из 8 букв. Каков информационный объем одной буквы?
8. Сообщение, записанное буквами из 16-буквенного алфавита, содержит 21 символ. Каков информационный объем сообщения?
9. Статья, набранная на компьютере, содержит 6 страниц. На каждой странице одинаковое количество строк по 56 символов в строке. Информационный объем статьи 504 Кбит. Определите количество строк на каждой странице текста, считая, что каждый символ закодирован с использованием Unicode.
10. Скорость чтения учащегося 10-го класса составляет в среднем 1024 символа в минуту. Какой информационный объем получит учащийся, если будет непрерывно читать в течение 30 мин текст, набранный на компьютере в кодировке Unicode?
11. Для получения годовой отметки по географии учащемуся требовалось написать реферат на 15 страниц. Он выполнил это задание на компьютере, набирая текст в кодировке Unicode. Какой объем памяти (в Кбайтах) займет реферат, если в каждой строке по 72 символа, а на каждой странице помещается 28 строк? Каждый символ занимает 2 байта памяти.
12. Оцените информационный объем страницы текста из учебного пособия по информатике. Для этого посчитайте количество строк на странице и количество символов в строке. Для текста на белом и голубом фоне расчеты нужно проводить раздельно, а затем суммировать результаты. Текст набран с использованием кодировки Unicode.
13. Петя и Вася пишут друг другу письма, кодируя информацию следующим образом: каждый символ письма кодируется двоичным кодом по таблице ASCII. Затем 0 за¬меняется на 1, а 1 на 0. По полученным кодам в таблице отыскиваются символы, из которых складывается текст письма. Получивший письмо производит те же действия для того, чтобы письмо прочитать. Например, для кодирования слова «Привет» нужно поступить так:
С помощью программы калькулятор можно не только переводить числа в двоичную систему счисления, но и производить замену 0 на 1, а 1 на 0. Чтобы заменить 0 на 1, а 1 на 0 на калькуляторе (в режиме программист), нужно выполнить действие Xor над двумя двоичными числами: исходным числом и числом 11111111 (например, 10001111 Xor 11111111 = 1110000).
Закодируйте этим способом: Привет, Вася! Как дела?
14. Для секретной переписки Оля и Света придумали свою кодовую таблицу. Декодируйте сообщение от Оли к Свете, используя часть таблицы. Придумайте коды для других букв русского алфавита.
15. Подтвердите или опровергните утверждение «СМС-сообщение, набранное транслитом, будет стоить дешевле, чем аналогичное сообщение, набранное русскими буквами».