ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.01.2021
Просмотров: 162
Скачиваний: 1
2.7.9. Коды символов
У каждого компьютера есть набор символов, который он использует. Как минимум этот набор включает 26 заглавных и 26 строчных букв, цифры от 0 до 9, а также некоторые специальные символы: пробел, точка, запятая, минус, символ возврата каретки и т. д.
Для того чтобы передавать эти символы в компьютер, каждому из них приписывается номер. Отображение символов в целые числа называется кодировкой символов. Связанные между собой компьютеры должны понимать общий код, иначе они не смогут обмениваться информацией. По этой причине были разработаны стандарты. Мы кратко рассмотрим два самых важных из них.
2.7.9.1. ASCII
Одна из наиболее распространенных кодировок называется ASCII (American Standard Code for Information Interchange - американский стандартный код для обмена информацией). Каждый символ ASCII содержит 7 битов, таким образом, всего может быть 128 символов. Коды от 0 до 1F (в шестнадцатеричной системе счисления) соответствуют непечатным управляющим символам.
Многие непечатные символы ASCII предназначены для управления передачей данных. Например, послание может состоять из символа начала заголовка SOH (Start of Header), самого заголовка, символа начала текста STX (Start of Text), самого текста, символа конца текста ЕТХ (End of Text) и, наконец, символа конца передачи EOT (End of Transmission). Однако на практике послания, отправляемые по телефонным линиям и сетям, форматируются по-другому, так что непечатные символы передачи ASCII практически не используются.
Печатные символы ASCII наглядны. Они включают буквы верхнего и нижнего регистров, цифры, знаки пунктуации и некоторые математические символы.
2.7.9.2. UNICODE
Компьютерная промышленность развивалась преимущественно в США, что привело к появлению кода ASCII. Этот код подходит для английского языка, но не очень удобен для других языков. Во французском языке есть надстрочные знаки, в немецком - умляуты и т. д. В некоторых европейских языках есть несколько букв, которых нет в ASCII. Некоторые языки имеют совершенно другой алфавит (например, русский или арабский), а у некоторых вообще нет алфавита (например, китайский). Компьютеры распространились по всему миру, и поставщики программного обеспечения хотят реализовывать свою продукцию не только в англоязычных, но и в тех странах, где большинство пользователей не говорят по-английски и где нужен другой набор символов. Первой попыткой расширения ASCII был IS 646, который добавлял к ASCII еще 128 символов, в результате чего получился 8-битный код под названием Latin-1. Добавлены были в основном латинские буквы со штрихами и диакритическими знаками (надстрочные и подстрочные знаки, например, точки у ё). Следующей попыткой был код IS 8859, в котором было введено понятие кодовой страницы. Кодовая страница - набор из 256 символов для определенного языка или группы языков. IS 8859-1 - это Latin-1. IS 8859-2 включает славянские языки с латинским алфавитом (например, чешский, польский и венгерский). IS 8859-3 содержит символы турецкого, мальтийского, эсперанто и галисийского языков и т. д. Главным недостатком такого подхода является то, что программное обеспечение должно следить, с какой именно кодовой страницей оно имеет дело в данный момент, и при этом нельзя смешивать языки. К тому же эта система не охватывает японский и китайский языки.
Группа компьютерных компаний разрешила эту проблему, создав новую систему под названием UNICODE, и объявила эту систему международным стандартом (IS 10646). UNICODE поддерживается некоторыми языками программирования (например, Java, C#), рядом операционных систем (например, Windows NT) и многими приложениями.
Основная идея UNICODE - приписывать каждому символу единственное постоянное 16-битное значение, которое называется указателем кода. Так как символы UNICODE состоят из 16 битов, всего получается 65 536 кодовых указателей. Поскольку во всех языках мира в общей сложности около 200 000 символов, кодовые указатели являются ресурсом, который нужно распределять очень бережно. Около половины кодов уже распределено, и консорциум, разработавший UNICODE, постоянно рассматривает предложения на распределение оставшейся части. Чтобы ускорить принятие UNICODE, консорциум использовал Latin-1 в качестве кодов от 0 до 255, легко преобразуя ASCII в UNICODE.
Вся совокупность кодов разделена на блоки, каждый блок содержит 16 кодов. Каждый алфавит в UNICODE имеет ряд последовательных зон. Приведем некоторые примеры (в скобках указано число задействованных кодов): латынь (336), греческий (144), русский (256). Отметим, что каждому из этих языков приписано больше кодов, чем в нем есть букв. Это было сделано отчасти потому, что во многих языках у каждой буквы есть несколько вариантов. Например, каждая буква в английском языке представлена в двух вариантах: там есть строчные и заглавные буквы. В некоторых языках буквы имеют три или более форм, выбор которых зависит от того, где находится буква: в начале, конце или середине слова.
Кроме того, некоторые коды были приписаны диакритическим знакам (112), знакам пунктуации (112), знакам валют (48), математическим символам (256), геометрическим фигурам (96) и рисункам (192). Чтобы пользователи могли создавать новые символы для особых целей, существует еще 6400 кодов.
UNICODE разрешил многие, но не все проблемы интернационализации. Например, латинский алфавит упорядочен, а иероглифы - нет, поэтому программа для английского языка может расположить слова “cat” и “dog” по алфавиту, сравнив значение кодов первых букв, а программе для японского языка нужны дополнительные таблицы, чтобы можно было вычислять, в каком порядке расположены символы в словаре. Еще одна проблема состоит в регулярном появлении новых слов. Если в английском языке для них новые коды не нужны, то в японском нужны. Представители различных профессиональных кругов также заинтересованы в наличии каких-либо особых символов. Консорциум по созданию UNICODE рассматривает новые предложения и выносит по ним решения.