Лекция 04 (1160805), страница 2
Текст из файла (страница 2)
Символьные типы данных. ЯП делятся на два неравных класса: С и С++ и почти все остальные. В С и С++ нет символьного типа данных, то, что называется char – это арифметический тип данных. Другие ЯП с этой точки зрения более строги, хотя понятно, что каждому символу соответствует какое-то целое число, которое называется кодировкой определенного набора символов. Символьные типы данных рассматриваются как особый тип данных и в обработке не могут смешиваться с другими типами данных. Есть внутренние функции, которые делают переход из символьных в целочисленные и обратно типа данных. Интересен подход языка Ада , в котором символьный тип рассматривается как некоторый специальный вид перечислимых типов данных. Так как не было единого стандарта, то тип данных CHARACTER зависел от реализации.
Здесь интересна реализация символьных типов данных. И будет важна социальная позиция рассмотрения ЯП. Несмотря на то что изначально машины предназначались для вычислений, тексты начали обрабатывать еще в 50-е года. Стала проблема закодировать символы алфавитов и еще специальные символы для внутреннего общения между устройствами.
Латинский алфавит вместе с обще употребимыми знаками препинания вмещался в реализацию, основанную на 7 битном представление, от сюда появился код ASCII-7 для обмена информации. Но этого не хватало для иностранных языков. Представление 8 бит хватало для кодировки все западноевропейских языков. Появился стандарт ISO-Latin-1. Были разработаны еще и другие кодировки, но проблема была в том, что компьютеры были ориентированы на обработку 8-ми битной информации, которой не хватало для всех кодировок.
Проблемы и очень сильные появились, когда в начале 80-х годов японцы стали очень активными потребителями и производителями вычислительных машин. Понятно, что они хотели писать на своем японском языке. А там очень много символов, и одним байтом уже никак не обойтись. Предложили два подхода: SBCS – представление набора символов в виде 1 байта, так вот все европейские и ближне европейские языки подходили под эту кодировку, но у каждого алфавита были свои системы кодировок. Английский присутствовал во всех кодировках. Для дальне восточных языков предложили кодировки MBCS – многобайтная кодировка, где каждый символ представлялся переменным количеством байтов, прежде всего для японского языка и DBCS – двухбайтная система кодировки, где каждый символ кодировался двумя байтами, для тайского и китайского языков. В начале 90-х годов была предложена сплошная система кодировки USC, USC-2 закодировали почти все известные алфавиты, но активно развивается USC-4. USC-2 представлена следующим образом: 0-127 – это ASCII-7 в любой системе кодировки, а старший байт – нулевой, остальные кодировки имели ненулевой старший байт. UCS-4 для тех, кому не хватило двух байтов. UNICODE – это стандарт, он очень похож на UCS-2, отличается в представление некоторых японских и китайских символов. Во всех современных ЯП, которые появились в 90-е годы (JAVA и C#), символьный тип данных – это кодировка UNICODE.
По сети очень много информации ходит на английском языке, если она закодирована в UNICODE, то вместе с каждым символом мы гоним кучу нулей. Эта проблема была решена с помощью UTF – универсального транс -форматного формата. Были разработаны UTF-1, UTF-7 – кодировка символа UNICODE 7-ми битами, UTF-8 кодировка символа UNICODE некоторой последовательностью байтов. UDF-8 нужна для передачи информации. Для обработки символов служит UNICODE, а для передачи UTF-8.