sonyps4.ru

Система кодирования ascii предназначена для единого. Системы кодировки текста

В компьютере понимается процесс ее преобразования в форму, позволяющую организовать более удобную передачу, хранение или автоматическую переработку этих данных. С этой целью используются различные таблицы. Кодировка ASCII — это первая система, разработанная в Соединенных Штатах для работы с англоязычным текстом, которая получила впоследствии распространение во всем мире. Ее описанию, особенностям, свойствам и дальнейшему использованию посвящена статья, представленная ниже.

Отображение и хранение информации в ЭВМ

Символы на мониторе компьютера или того или иного мобильного цифрового гаджета формируются на основе наборов векторных форм всевозможных знаков и кода, позволяющего найти среди них тот символ, который необходимо вставить в нужное место. Он представляет собой последовательностей бит. Таким образом, каждому символу должен однозначно соответствовать набор нулей и единиц, которые стоят в определенном, уникальном порядке.

Как все начиналось

Исторически сложилось так, что первые ЭВМ были англоязычными. Для кодирования символьной информации в них было достаточно использовать всего лишь 7 бит памяти, тогда как для этой цели выделялся 1 байт, состоящий из 8 битов. Количество знаков, понимаемых компьютером в таком случае, было равно 128. В число таких символов входили английский алфавит с его знаками препинания, числа и некоторые специальные символы. Англоязычная семибитная кодировка с соответствующей таблицей (кодовой страницей), разработанная в 1963 году, была названа American Standard Code for Information Interchange. Обычно для ее обозначения использовалась и используется и по сей день аббревиатура «Кодировка ASCII».

Переход к мультиязычности

Со временем компьютеры стали широко использоваться и в неанглоговорящих странах. В связи с этим появилась нужда в кодировках, позволяющих использовать национальные языки. Было решено не изобретать велосипед, и взять за основу ASCII. Таблица кодировки в новой редакции значительно расширилась. Использование 8-го бита позволило переводить на компьютерный язык уже 256 символов.

Описание

Кодировка ASCII имеет таблицу, которая делится на 2 части. Общепринятым международным стандартом принято считать лишь ее первую половину. В нее входят:

  • Символы с порядковыми номерами от 0 до 31, кодируемые последовательностями от 00000000 до 00011111. Они отведены для управляющих символов, которые руководят процессом вывода текста на экран или принтер, подачей звукового сигнала и т. п.
  • Символы с NN в таблице от 32 до 127, кодируемые последовательностями от 00100000 до 01111111 составляют стандартную часть таблицы. В их число входят пробел (N 32), буквы латинского алфавита (строчные и прописные), десятизначные цифры от 0 до 9, знаки препинания, скобки разного начертания и другие символы.
  • Символы с порядковыми номерами от 128 до 255, кодируемые последовательностями от 10000000 до 11111111. В их число включены буквы национальных алфавитов, отличные от латинского. Именно эта альтернативная часть таблицы кодировка ASCII используется для преобразования в компьютерную форму русских символов.

Некоторые свойства

К особенностям кодировки ASCII относится отличие букв «A» - «Z» нижнего и верхнего регистров только одним битом. Это обстоятельство значительно упрощает преобразование регистра, а также его проверку на принадлежность к заданному диапазону значений. Кроме того, все буквы в системае кодировки ASCII представляются собственными порядковыми номерами в алфавите, которые записаны 5 цифрами в двоичной системе счисления, перед которыми для букв нижнего регистра стоит 011 2 , а верхнего — 010 2 .

К числу особенностей кодировки ASCII можно причислить и представление 10 цифр - «0»-«9». Во второй системе счисления они начинаются с 00112, а заканчиваются 2-ми значениями чисел. Так, 0101 2 эквивалентно десятичному числу пять, поэтому символ «5» записывается как 0011 01012. Опираясь на сказанное, можно легко преобразовать двоично-десятичные числа в строку в кодировке ASCII посредством добавления слева битовой последовательности 00112 к каждому полубайту.

"Юникод"

Как известно, для отображения текстов на языках группы юго-восточной Азии требуются тысячи знаков. Такое их количество никак не описывается в одном байте информации, поэтому даже расширенные версии ASCII уже не могли удовлетворять возросшие потребности пользователей из разных стран.

Так, возникла необходимость создания универсальной кодировки текста, разработкой которой при сотрудничестве со многими лидерами мировой IT-индустрии занялся консорциум "Юникод". Его специалистами была создана система UTF 32. В ней для кодирования 1 символа выделялось 32 бита, составляющих 4 байта информации. Главным недостатком было резкое увеличение объема необходимой памяти в целых 4 раза, что влекло за собой множество проблем.

В то же время для большинства стран с официальными языками, относящимися к индоевропейской группе, количество знаков, равное 2 32 , является более чем избыточным.

В результате дальнейшей работы специалистов из консорциума "Юникод" появилась кодировка UTF-16. Она стала тем вариантом преобразования символьной информации, которая устроила всех как по объему требуемой памяти, так и по числу кодируемых символов. Именно поэтому UTF-16 была принята по умолчанию и в ней для одного знака требуется зарезервировать 2 байта.

Даже эта достаточно продвинутая и удачная версия "Юникода" имела некоторые недостатки, и после перехода от расширенной версии ASCII к UTF-16 увеличивала вес документа в два раза.

В связи с этим было решено использовать кодировку переменной длины UTF-8. В таком случае каждый символ исходного текста кодируется последовательностью длиной от 1 до 6 байт.

Связь с American standard code for information interchange

Все знаки латинского алфавита в UTF-8 переменной длины кодируются в 1 байт, как в системе кодировки ASCII.

Особенностью ЮТФ-8 является то, что в случае текста на латинице без использования других символов, даже программы, не понимающие "Юникод", все равно позволят его прочитать. Иными словами, базовая часть кодировки текста ASCII просто переходит в состав новой UTF переменной длины. Кириллические знаки в ЮТФ-8 занимают 2 байта, а, например, грузинские — 3 байта. Созданием UTF-16 и 8 была решена основная проблема создания единого кодового пространства в шрифтах. С тех пор производителям шрифтов остается только заполнять таблицу векторными формами символов текста исходя из своих потребностей.

В различных операционных системах предпочтение отдается различным кодировкам. Чтобы иметь возможность читать и редактировать тексты, набранные в другой кодировке, применяются программы перекодировки русского текста. Некоторые текстовые редакторы содержат встроенные перекодировщики и позволяют читать текст вне зависимости от кодировки.

Теперь вы знаете, сколько символов в кодировке ASCII и, как и почему она была разработана. Конечно, сегодня наибольшее распространение в мире получил стандарт "Юникод". Однако нельзя забывать, что он создан на базе ASCII, поэтому следует по достоинству оценивать вклад его разработчиков в сферу IT.

Кодирование текста

Кодирование текста-это установление таблицы соответствия между кодируемым символом и комбинацией состояния битов, то есть процесс кодирования заключается в том, что каждому символу ставится в соответствие уникальный код. В настоящее время существуют различные системы кодирования, основное различие между ними заключается в количестве бит, необходимых для кодирования одного символа.

· ASCII (American Standard Code for Information Interchange): для кодирования одного символа используется количество информации=7 бит. Если рассматривать символы как возможные события (см. лекцию 1), то можно вычислить количество символов, которые можно закодировать:

2*26-латинские буквы

32-различные знаки

34-служебные символы

128-символов

Таким образом, количество кодируемых символов ограничено, поэтому в семибитной системе кодировки невозможно закодировать буквы русского алфавита. Возникла задача одновременно изображать и русские, и латинские символы. Способами решения этой задачи являются транслитерация и расширение кодировки.

· Восьмибитные системы кодировки:

Если старший бит кода-0, то система кодировки совпадает с ASCII, если старший бит –1, то вводятся дополнительные кодов-ые страницы.

В России была создана одна из таких систем КОИ-8, ее недостаток в том, что русские буквы расположены не по алфавиту.Кроме того существуют СР-866, СР-1251, ANSI, использующиеся в операционной системе Windows.

· Большие кодовые страницы:

На кодирование одного символа необходимо 16 бит

естественно с такой системой кодирования не возникает проблемы невозможности кодировки того или иного символа, так как 65535 с избытком покрывает многообразие используемых символов, но UNICODE имеет другой недостаток: при переводе текстов из ASCII в UNICODE существенно увеличивается размер компьютерного текста. В связи с этим разработан еще один класс систем кодировки, использующих переменное число бит для кодирования символов.

Если старший бит кода равен нулю (бит8=0), то система кодировки совпадает с ASCII, причем каждый из первых 128 символов кодируется одним байтом.
Если старший равен единице (бит8=1, бит7=0), то следующие 16384 символа кодируются аналогично UNICODE, то есть для кодировки каждого символа используется два байта. Оставшиеся символы (65535-128-16384=49023) кодируются тремя байтами.

Пример: рассмотрим, сколько информации несет цепочка символов "Information×-×Информация"
в различных системах кодировки. В случае СР1251 каждый символ кодируется одним байтом Þ количество информации: 24*1=24 байт. В UNICODE каждый символ кодируется двумя байтами Þ количество информации: 24*2=48 байт. В UTF-8 на кодировку латинских букв, знаков пробела и тире необходимо один байт на каждый символ, а каждый символ слова "Информация" кодируется двумя байтами Þ количество информации: 14*1+10*2=34 байт.


С одной стороны, компьютерный текст – это алфавитный, по которому текст представляется как цепочка символов (алфавитный подход). Другой подход заключается в том, что компьютерный текст рассматривается уже как сложная структура, состоящая из множества всех цепочек символов.

t:{1, 2, 3...k} - одна из таких цепочек длиной k.

Такой подход дает возможность понять алгоритм преобразования текста, который осуществляется по принципу функционального отображения, то есть одной текстовой цепочке, входящей в область определения этого алгоритма, ставится в соответствие другая цепочка, являющаяся результатом преобразования: t 1 ®t 2 . В таком случае областью определения функции (алгоритма) будет являться язык.

Грамматика языка это правила, порождающие все входящие в язык цепочки. Отдельный символ алфавита – это регулярное выражение. Грамматики, построенные на регулярных выражениях, записываются в виде программы, которая порождает цепочку символов. Назначение регулярных выражений – задать множество цепочек, составляющих язык.

Кодирование текста: ASCII и Unicode (UTF-16)

Человек легко воспринимает текст. Наш мозг ежедневно обрабатывает огромные объёмы текста. В отличие от нас, процессор компьютера может работать только с числами. Поэтому все текстовые данные в памяти компьютера представляются числами. Но перед подробным обсуждением этого момента, давайте вспомним, как организована память компьютера.

Память компьютера - это последовательность битов. Бит - минимальная единица информации, которая может хранить два значения: ноль или единицу. Т.е. все данные, которые может выдавать компьютер (числа, текст, аудио, видео) - это последовательность нулей и единиц.

Бит слишком малая единица. Поэтому биты объединяются в байты. В одном байте восемь бит. Каждый байт имеет свой адрес. Именно байт является минимальной единицей, к которой может обратиться процессор - процессор не может обращаться к отдельным битам, только через соответствующие байты. Давайте посмотрим на небольшой участок памяти компьютера:

01001000 01000101 01001011 01001011 01001111 00100001

Сверху показаны адреса байтов, а снизу - значения, хранящиеся в данных адресах. В реальности не существует таких адресов, так как современные компьютеры работают с огромными адресными пространствами. Адреса в современных компьютерах записываются вот так: 0x01328921. Адреса записываются в шестнадцатеричном формате.

В одном байте может храниться 256 значений - 28 = 256. Диапазон значений: от нуля до 255 (для беззнаковых чисел), или от -128 до 127 (для чисел со знаком). В шестнадцатеричной форме максимальное значение байта - 0xff. Обратите внимание на удобство использования шестнадцатеричной системы счисления: для записи любого однобайтного значения требуется две цифры. Посмотрим на диапазоны однобайтного числа во всех трёх системах счисления:

00000000 ... 11111111

Процессор видит все числа в двоичном виде, но может преобразовывать их в другие системы счисления, чтобы нам их было удобно читать. Правила преобразования между различными системами счисления мы обсуждали в предыдущих уроках. Последовательность байтов, приведённую выше, можно представить и так:

0x48 0x45 0x4b 0x4b 0x4f 0x21 // шестнадцатеричная форма

Компьютеру удобнее использовать бинарную форму, а нам - шестнадцатеричную, или десятичную.

Кодировка ASCII

Чтобы представить текст числами, каждой букве присваивают числовое значение - кодируют значения букв. Присвоив всем буквам уникальное значение, мы получим кодировку (character set, endoding). Но использовать свою кодировку нет никакого смысла - вы сможете использовать её только в своей программе. На данный момент наибольшее распространение получила кодировка ASCII.



Первоначально один символ в кодировке ASCII занимал 7 бит. Но когда распространение получил 8-битный байт (да, существовали байты разных размеров), то ASCII была расширена до восьми бит. 7-битная кодировка в два раза меньше восьмибитной: 27=128 < 28=256.

Итак, первоначально в кодировке ASCII было 128 значений: от 0 до 127 (0x00 до 0x7f). Этого достаточно чтобы закодировать все буквы латинского алфавита, арабские цифры и ещё ряд знаков.

7-битная кодировка ASCII является основой для всех распространённых сейчас кодировок и чрезвычайно важна в программировании. Поэтому мы познакомимся с конкретными значениями:

0 - ноль. Это не цифра в выводимом тексте. К данному коду не привязан никакой символ. Т.е. вы никогда не увидите на экране представление нуля. Тем не менее, ноль очень важен в программировании и хранении текста. Для чего используется этот код, мы узнаем позже.

32 - пробел.

48 - код нуля. Когда мы видим на экране монитора ноль, в памяти компьютера этот символ представлен числом 48.

57 - девятка.

65 - прописная буква A (английский алфавит).

90 - прописная буква Z.

97 - строчная буква a.

122 - строчная буква z.

Давайте вернёмся к рассмотренной ранее последовательности байтов, и попробуем значению каждого поставить в соответствие код из ASCII:

01001000 01000101 01001011 01001011 01001111 00100001 // двоичная (бинарная) форма

72 69 76 76 79 33 // десятичная форма

H E L L O ! // символы ASCII

О, чудо! У нас получился текст "HELLO!"

Компьютер видит всего лишь последовательность байт, к которым он может обратиться по их адресам. Мы можем видеть как простые числа, так и текст, если смотреть на эти числа в кодировке ASCII.

Расширенная кодировка ASCII (extended ASCII)

С появлением восьмибитной кодировки, в ASCII смогли закодировать и другие алфавиты. Расширенных кодировок ASCII много - существуют версии для многих национальных алфавитов. При этом первая половина кодировки (значения от нуля до 127) везде одинаковая.

Русский алфавит (кириллица) закодирован в кодировке с названием windows-1251. Ещё одна популярная версия ASCII - windows-1252 - это кодировка для западноевропейских языков (в ней закодированы буквы специфические для французского и немецкого алфавитов). Кстати, текст, который вы сейчас читаете, закодирован в windows-1251.

Нам не важно, как закодированы русские буквы (да и английские тоже) в windows-1251 - не нужно знать конкретные значения. Если необходимо, можете найти полный список значений символов для windows-1251 в поисковиках.

Кодирование цифр в тексте

На практике не нужно знать закодированные значения букв. Но в то же время нужно обязательно запомнить закодированные значения цифр. В ASCII цифры имеют коды с 48 до 57. 48 - ноль, 49 - единица... 57 - девять. Напоминаю, что первые 128 значений одинаковы во всех кодировках, поэтому и коды цифр везде совпадают. И это, скажу я вам, очень здорово. Для чего нужно знать коды цифр, и как это связано с созданием игр?

Допустим, в нашей игре нужно выводить на экран значений юнитов пользователя. Внутри программы это простое число, представленное переменной. Но чтобы пользователь увидел это число, его нужно превратить в текст, который и будет отображён на экране. Поэтому при создании игры, нужно обязательно написать код, который занимается преобразованием чисел в текст.

Для примера рассмотрим два значения: в начале игры у пользователя нет юнитов, а через некоторое время он построил пятерых.

Сначала пользователю нужно вывести символ 0. Для этого потребуется использовать закодированное значение этого символа - 48. Затем пользователю нужно вывести символ 5, код которого - 53. Здесь видна интересная особенность: код символа цифры отличается от фактического значения на 48. Поэтому для однозначных (и только для однозначных) чисел мы можем использовать вот такой код:

int var = GetUnitNumber(); // узнать количество юнитов

char output = var+48;

Теперь можно вывести переменную output на экран. Только осталось решить одну проблему: в реальных ситуациях очень редко используются однозначные числа. Например, в Company of heroes у игрока в подчинении находятся в среднем больше 15 отрядов, в Age of Empires - больше 50. В других играх ситуация аналогичная. В шутерах может потребоваться выводить количество патронов и здоровья (значения которых практически всегда больше 9). Конечно же, и при создании своей игры нам нужно будет выводить многозначные числа. Вывод многозначных чисел мы рассмотрим в следующем уроке, а сейчас вернёмся к рассмотрению кодировок.

Кодировка (encoding) Юникод - Unicode

Один байт может иметь только 256 значений. Это значит, что в кодировке ASCII можно закодировать 256символов: цифр, букв, пиктограмм, знаков пунктуации и других различных символов. В то же время существуют письменности, в которых гораздо больше символов, например, китайские или японские иероглифы.

Для решения этой (и некоторых других) проблемы в начале девяностых была создана кодировка Юникод(Unicode). Первоначально все символы юникода занимали два байта. Соответственно, в unicode можно было закодировать 216 = 65536 значений. Затем кодовое пространство было расширено до более чем миллиона символов. В результате этого появилось несколько представлений юникода.

Наиболее популярными представлениями юникода являются два: UTF-8 - используется в интернете и UTF-16 - используется в Windows (Windows XP, Windows Vista, Windows 7).

В контексте создания игр не важно, как кодируются все символы в различных представлениях Unicode. Но важно то, что во всех представлениях арабские цифры кодируются так же, как и в ASCII.

Существует две версии UTF-16: UTF-16LE (little-endian) - кодировка с обратным порядком байтов и UTF-16BE (big-endian) - кодировка с прямым порядком байтов. В Windows, конечно же, используется UTF16-LE.

Код символов в юникоде обозначается так: U+hhhh (четыре шестнадцатеричных цифры, h - от hexadecimal - шестнадцатеричный). Например, U+221A - символ квадратного корня - √.

Часть символов в UTF-16 кодируются двумя байтами (первые 63 тысячи). Остальные символы кодируются суррогатными парами. Так как это не слишком важно для создания игр, то я не буду останавливаться на суррогатных парах подробно.

В UTF-8 первые 128 символов кодируются одним байтом. Остальные символы могут кодироваться несколькими байтами (от двух до четырёх).

И ещё один момент (самый важный): в юникод закодированы все символы всех современных и многих мёртвых письменностей плюс знаки из различных областей науки и культуры (математические и экономически символы, нотные знаки и многое другое). Именно по этой причине и нужно использовать юникод.

Ещё раз повторюсь, что знание стандарта юникода и особенностей его различных представлений, не сильно помогает в такой теме, как создание игр, поэтому дальнейшее знакомство с юникодом вам придётся продолжать самостоятельно. Неоценимую помощь в этом деле окажет, как обычно, стандарт.

Кодирование текста в Microsoft Windows (Windows XP, Windows Vista, Windows 7)

В современных версиях Windows существует два способа представления текста: UTF-16 и кодовые страницы (в основном это восьмибитные кодировки). Основной способ - юникод. Кодовые страницы нужны для совместимости со старыми приложениями (в Windows 95, Windows 98 - в основном использовалась ASCII). Кроме того, юникод не понимает одна очень важная программа - консоль.

Пусть вас не смущает новый термин - кодовая страница (code page). В windows так называются все кодировки (character sets или encodings). Т.е. понятие кодировка равнозначно кодовой странице.

Сразу сделаю замечание, которое лучше запомнить. В Windows есть чёткое разделение: вот юникод (UTF-16LE), а вот все остальные кодировки. И юникод, и остальные кодировки в Windows называются кодовыми страницами, но этот термин (кодовые страницы) я буду применять ко всем кодировкам за исключением юникода.

Когда мы писали консольные программы, вывод текста осуществлялся с помощью кодовой страницы windows-1252. Именно поэтому нам приходилось вызывать setlocale (она меняет кодовую страницу на windows-1251):

Эта функция меняет локальность.

Locale (местная специфика) - локальность

В Windows есть такое понятие как Locale. Здесь я не совсем верно использую кальку этого слова - локальность, но, на мой взгляд, она довольно ёмкая, чтобы вместить весь смысл понятия Locale. Locale переводится как местные особенности. Т.е. это какие-то параметры используемы в данном конкретном месте (регионе, стране). setlocale как раз и меняет эти особенности:

setlocale(LC_CTYPE,"Russian");

В данном вызове локальность меняется на российскую. Поэтому Windows может использовать наши местные особенности: представление даты и времени, систему измерения, валюту и, конечно же, кодовую страницу.

Первый параметр этой функции говорит, какие категории местных особенностей можно изменить. Можно изменить только кодовую страницу (LC_CTYPE), можно формат представления даты и времени (LC_TIME), а можно изменить и все категории (LC_ALL, all - всё).

Возвращаемся к кодировкам.

Одновременно может использоваться только одна кодовая страница, при этом с символами кодовой страницы в программе можно использовать и юникод, так как юникод стоит особняком от всех остальных кодовых страниц. Старайтесь в своих программах всегда использовать юникод. Кодовые страницы имеет смысл использовать только в консоли.

Наложение символов

Благодаря символу BS (возврат на шаг) на принтере можно печатать один символ поверх другого. В ASCII было предусмотрено добавление таким образом диакритики к буквам, например:

  • a BS " → á
  • a BS ` → à
  • a BS ^ → â
  • o BS / → ø
  • c BS , → ç
  • n BS ~ → ñ

Примечание : в старых шрифтах апостроф " рисовался с наклоном влево, а тильда ~ была сдвинута вверх, так что они как раз подходили на роль акута и тильды сверху.

Если на символ накладывается тот же символ, то получается эффект жирного шрифта, а если на символ накладывается подчёркивание, то получается подчёркнутый текст.

  • a BS a → a
  • a BS _ → a

Примечание : это используется, например, в справочной системе man .

Национальные варианты ASCII

Стандарт ISO 646 (ECMA-6) предусматривает возможность размещения национальных символов на месте @ [ \ ] ^ ` { | } ~ . В дополнение к этому, на месте # может быть размещён £ , а на месте $ - ¤ . Такая система хорошо подходит для европейских языков, где нужны лишь несколько дополнительных символов. Вариант ASCII без национальных символов называется US-ASCII, или «International Reference Version».

Впоследствии оказалось удобнее использовать 8-битные кодировки (кодовые страницы), где нижнюю половину кодовой таблицы (0-127) занимают символы US-ASCII, а верхнюю (128-255) - дополнительные символы, включая набор национальных символов. Таким образом, верхняя половина таблицы ASCII до повсеместного внедрения Юникода активно использовалась для представления локализированных символов, букв местного языка. Отсутствие единого стандарта размещения кириллических символов в таблице ASCII доставляло множество проблем с кодировками (КОИ-8 , Windows-1251 и другие). Другие языки с нелатинской письменностью тоже страдали из-за наличия нескольких разных кодировок.

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
0. NUL SOM EOA EOM EQT WRU RU BELL BKSP HT LF VT FF CR SO SI
1. DC 0 DC 1 DC 2 DC 3 DC 4 ERR SYNC LEM S 0 S 1 S 2 S 3 S 4 S 5 S 6 S 7
2.
3.
4. BLANK ! " # $ % & " ( ) * + , - . /
5. 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
6.
7.
8.
9.
A. @ A B C D E F G H I J K L M N O
B. P Q R S T U V W X Y Z [ \ ]
C.
D.
E. a b c d e f g h i j k l m n o
F. p q r s t u v w x y z ESC DEL

На тех компьютерах, где минимально адресуемой единицей памяти было 36-битное слово, поначалу использовали 6-битные символы (1 слово = 6 символов). После перехода на ASCII на таких компьютерах в одном слове стали размещать либо 5 семибитных символов (1 бит оставался лишним), либо 4 девятибитных символа.

ASCII-коды используются также для определения нажатой клавиши при программировании. Для стандартной QWERTY-клавиатуры таблица кодов выглядит следующим образом:

Множество символов, с помощью которых записывается текст, называется алфавитом .

Число символов в алфавите – это его мощность .

Формула определения количества информации: N = 2 b ,

где N – мощность алфавита (количество символов),

b – количество бит (информационный вес символа).

В алфавит мощностью 256 символов можно поместить практически все необходимые символы. Такой алфавит называется достаточным.

Т.к. 256 = 2 8 , то вес 1 символа – 8 бит.

Единице измерения 8 бит присвоили название 1 байт:

1 байт = 8 бит.

Двоичный код каждого символа в компьютерном тексте занимает 1 байт памяти.

Каким же образом текстовая информация представлена в памяти компьютера?

Удобство побайтового кодирования символов очевидно, поскольку байт - наименьшая адресуемая часть памяти и, следовательно, процессор может обратиться к каждому символу отдельно, выполняя обработку текста. С другой стороны, 256 символов – это вполне достаточное количество для представления самой разнообразной символьной информации.

Теперь возникает вопрос, какой именно восьмиразрядный двоичный код поставить в соответствие каждому символу.

Понятно, что это дело условное, можно придумать множество способов кодировки.

Все символы компьютерного алфавита пронумерованы от 0 до 255. Каждому номеру соответствует восьмиразрядный двоичный код от 00000000 до 11111111. Этот код просто порядковый номер символа в двоичной системе счисления.

Таблица, в которой всем символам компьютерного алфавита поставлены в соответствие порядковые номера, называется таблицей кодировки.

Для разных типов ЭВМ используются различные таблицы кодировки.

Международным стандартом для ПК стала таблица ASCII (читается аски) (Американский стандартный код для информационного обмена).

Таблица кодов ASCII делится на две части.

Международным стандартом является лишь первая половина таблицы, т.е. символы с номерами от 0 (00000000), до 127 (01111111).

Структура таблицы кодировки ASCII

Порядковый номер

Код

Символ

0 - 31

00000000 - 00011111

Символы с номерами от 0 до 31 принято называть управляющими.
Их функция – управление процессом вывода текста на экран или печать, подача звукового сигнала, разметка текста и т.п.

32 - 127

00100000 - 01111111

Стандартная часть таблицы (английский). Сюда входят строчные и прописные буквы латинского алфавита, десятичные цифры, знаки препинания, всевозможные скобки, коммерческие и другие символы.
Символ 32 - пробел, т.е. пустая позиция в тексте.
Все остальные отражаются определенными знаками.

128 - 255

10000000 - 11111111

Альтернативная часть таблицы (русская).
Вторая половина кодовой таблицы ASCII, называемая кодовой страницей (128 кодов, начиная с 10000000 и кончая 11111111), может иметь различные варианты, каждый вариант имеет свой номер.
Кодовая страница в первую очередь используется для размещения национальных алфавитов, отличных от латинского. В русских национальных кодировках в этой части таблицы размещаются символы русского алфавита.

Первая половина таблицы кодов ASCII


Обращаю ваше внимание на то, что в таблице кодировки буквы (прописные и строчные) располагаются в алфавитном порядке, а цифры упорядочены по возрастанию значений. Такое соблюдение лексикографического порядка в расположении символов называется принципом последовательного кодирования алфавита.

Для букв русского алфавита также соблюдается принцип последовательного кодирования.

Вторая половина таблицы кодов ASCII


К сожалению, в настоящее время существуют пять различных кодировок кириллицы (КОИ8-Р, Windows. MS-DOS, Macintosh и ISO). Из-за этого часто возникают проблемы с переносом русского текста с одного компьютера на другой, из одной программной системы в другую.

Хронологически одним из первых стандартов кодирования русских букв на компьютерах был КОИ8 ("Код обмена информацией, 8-битный"). Эта кодировка применялась еще в 70-ые годы на компьютерах серии ЕС ЭВМ, а с середины 80-х стала использоваться в первых русифицированных версиях операционной системы UNIX.

От начала 90-х годов, времени господства операционной системы MS DOS, остается кодировка CP866 ("CP" означает "Code Page", "кодовая страница").

Компьютеры фирмы Apple, работающие под управлением операционной системы Mac OS, используют свою собственную кодировку Mac.

Кроме того, Международная организация по стандартизации (International Standards Organization, ISO) утвердила в качестве стандарта для русского языка еще одну кодировку под названием ISO 8859-5.

Наиболее распространенной в настоящее время является кодировка Microsoft Windows, обозначаемая сокращением CP1251.

С конца 90-х годов проблема стандартизации символьного кодирования решается введением нового международного стандарта, который называется Unicode . Это 16-разрядная кодировка, т.е. в ней на каждый символ отводится 2 байта памяти. Конечно, при этом объем занимаемой памяти увеличивается в 2 раза. Но зато такая кодовая таблица допускает включение до 65536 символов. Полная спецификация стандарта Unicode включает в себя все существующие, вымершие и искусственно созданные алфавиты мира, а также множество математических, музыкальных, химических и прочих символов.

Попробуем с помощью таблицы ASCII представить, как будут выглядеть слова в памяти компьютера.

Внутреннее представление слов в памяти компьютера

Иногда бывает так, что текст, состоящий из букв русского алфавита, полученный с другого компьютера, невозможно прочитать - на экране монитора видна какая-то "абракадабра". Это происходит оттого, что на компьютерах применяется разная кодировка символов русского языка.



Загрузка...