§13 Кодирование текстовых данных. Представление текста. Понятие кодовой таблицы. Решение задач на кодирование текста.

§ 13. кодирование текстовых данных

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. Подтвердите или опровергните утверждение «СМС-сообщение, набранное транслитом, будет стоить дешевле, чем аналогичное сообщение, набранное русскими буквами».

 

Проверь себя

Выбор тем