19.12.13 23756

Для того, чтобы грамотно использовать ASCII , необходимо расширить знания в данной сфере и о возможностях кодирования.

Что это такое?

ASCII представляет собой кодировочную таблицу печатных символов (см. скриншот №1), набираемых на компьютерной клавиатуре, для передачи информации и некоторых кодов. Иными словами происходит кодирование алфавита и десятичных цифр в соответствующие символы, представляющие и несущие в себе необходимую информацию.

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

Для решения подобных вопросов были разработаны другие версии таблицы ASCII . Например, для языков с иноязычной структурой были или убраны буквы английского алфавита, или к ним добавлялись дополнительные символы в виде национального алфавита. Так, в кодировке ASCII могут присутствовать русские буквы для национального использования (см. скриншот №2).

Где применяется система кодировки ASCII?

Данная кодировочная система необходима не только для набора текстовой информации на клавиатуре. Она также используется в графике. Например, в программе ASCII Art Maker графические изображения различных расширений состоят из спектра символов кодировки ASCII (см. скриншот №3).

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

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

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

  1. Переносимый набор символов;
  2. Управляющие символы;
  3. EBCDIC;
  4. VISCII;
  5. YUSCII;
  6. Юникод;
  7. ASCII art;
  8. КОИ-8.

Свойства таблицы ASCII

Как и любая систематизированная программа, ASCII обладает своими характерными свойствами. Так, например, десятеричная система исчисления (цифры от 0 до 9) преобразуется в двоичную систему исчисления (т.е. каждая десятеричная цифра преобразуется в двоичную 288=1001000 соответственно).

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

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

Применение ASCII в программах Microsoft Office:

В случае необходимости данный вариант кодирования информации может быть использован в Microsoft Notepad и Microsoft Office Word. В рамках этих приложений документ может быть сохранен в формате ASCII , но в этом случае при наборе текста невозможно будет использование некоторых функций.

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

[8-битные кодировки: ASCII, КОИ-8R и CP1251 ] Первые таблицы кодировки, созданные в США, не использовали восьмой бит в байте. Текст представлялся как последовательность байт, но восьмой бит не учитывался (он применялся в служебных целях).

Общепризнанным стандартом стала таблица ASCII (American Standard Code for Information Interchange). Первые 32 символа таблицы ASCII (от 00 до 1F) использовались для непечатаемых символов. Они были предназначены для управления печатающим устройством и т.п. Остальная часть - от 20 до 7F - обычные (печатаемые) символы.

Таблица 1 - кодировка ASCII

Dec Hex Oct Char Description
0 0 000 null
1 1 001 start of heading
2 2 002 start of text
3 3 003 end of text
4 4 004 end of transmission
5 5 005 enquiry
6 6 006 acknowledge
7 7 007 bell
8 8 010 backspace
9 9 011 horizontal tab
10 A 012 new line
11 B 013 vertical tab
12 C 014 new page
13 D 015 carriage return
14 E 016 shift out
15 F 017 shift in
16 10 020 data link escape
17 11 021 device control 1
18 12 022 device control 2
19 13 023 device control 3
20 14 024 device control 4
21 15 025 negative acknowledge
22 16 026 synchronous idle
23 17 027 end of trans. block
24 18 030 cancel
25 19 031 end of medium
26 1A 032 substitute
27 1B 033 escape
28 1C 034 file separator
29 1D 035 group separator
30 1E 036 record separator
31 1F 037 unit separator
32 20 040 space
33 21 041 !
34 22 042 "
35 23 043 #
36 24 044 $
37 25 045 %
38 26 046 &
39 27 047 "
40 28 050 (
41 29 051 )
42 2A 052 *
43 2B 053 +
44 2C 054 ,
45 2D 055 -
46 2E 056 .
47 2F 057 /
48 30 060 0
49 31 061 1
50 32 062 2
51 33 063 3
52 34 064 4
53 35 065 5
54 36 066 6
55 37 067 7
56 38 070 8
57 39 071 9
58 3A 072 :
59 3B 073 ;
60 3C 074 <
61 3D 075 =
62 3E 076 >
63 3F 077 ?
Dec Hex Oct Char
64 40 100 @
65 41 101 A
66 42 102 B
67 43 103 C
68 44 104 D
69 45 105 E
70 46 106 F
71 47 107 G
72 48 110 H
73 49 111 I
74 4A 112 J
75 4B 113 K
76 4C 114 L
77 4D 115 M
78 4E 116 N
79 4F 117 O
80 50 120 P
81 51 121 Q
82 52 122 R
83 53 123 S
84 54 124 T
85 55 125 U
86 56 126 V
87 57 127 W
88 58 130 X
89 59 131 Y
90 5A 132 Z
91 5B 133 [
92 5C 134 \
93 5D 135 ]
94 5E 136 ^
95 5F 137 _
96 60 140 `
97 61 141 a
98 62 142 b
99 63 143 c
100 64 144 d
101 65 145 e
102 66 146 f
103 67 147 g
104 68 150 h
105 69 151 i
106 6A 152 j
107 6B 153 k
108 6C 154 l
109 6D 155 m
110 6E 156 n
111 6F 157 o
112 70 160 p
113 71 161 q
114 72 162 r
115 73 163 s
116 74 164 t
117 75 165 u
118 76 166 v
119 77 167 w
120 78 170 x
121 79 171 y
122 7A 172 z
123 7B 173 {
124 7C 174 |
125 7D 175 }
126 7E 176 ~
127 7F 177 DEL

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

Для этого было принято решение использовать восьмой бит в каждом байте. Тем самым оказались доступны ещё 128 значений (от 80 до FF), которые можно было использовать для кодирования символов. Первая из восьмибитных таблиц - “расширенный ASCII” (Extended ASCII ) - включала в себя различные варианты латинских символов, применяемые в некоторых языках Западной Европы. Также в ней были другие дополнительные символы, включая псевдографику.

Псевдографические символы позволяют, выводя на экран только текстовые символы, обеспечивать некоторое подобие графики. При помощи псевдографики работает, например, програма для управления файлами FAR Manager.

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

Во всех кодировках, получивших распространение, первые 127 символов (т.е. значения байта при восьмом бите, равном 0) совпадают с ASCII. Таким образом, файл в формате ASCII работает в любой из этих кодировок; буквы английского языка в них представлены одинаково.

Организация ISO (International Standardization Organization - Международная Организация по Стандартам) приняла группу стандартов ISO 8859 . Она определяет 8-битные кодировки для разных групп языков. Так, ISO 8859-1 - это Extended ASCII, таблица для США и Западной Европы. А ISO 8859-5 - таблица для кириллицы (включая русский язык).

Однако по историческим причинам кодировка ISO 8859-5 не прижилась. Реально для русского языка применяются следующие кодировки:

Code Page 866 (CP866 ), она же “DOS”, она же “альтернативная кодировка ГОСТ”. Широко применялась до середины 90-х годов; теперь используется ограниченно. Практически не применяется для распространения текстов в Интернете.
- КОИ-8. Разработана в 70-80-е годы. Является общепринятым стандартом для передачи почтовых сообщений в российском Интернете. Широко применяется также в операционных системах семейства Unix, включая Linux. Вариант КОИ-8, рассчитанный на русский язык, называется КОИ-8R ; существуют версии для иных кириллических языков (так, KOI8-U - вариант для украинского языка).
- Code Page 1251, CP1251 , Windows-1251. Разработана компанией Microsoft для поддержки русского языка в системе Windows.

Основным достоинством CP866 было сохранение символов псевдографики на тех же местах, что и в Extended ASCII; поэтому могли без изменений работать зарубежные текстовые программы, например, знаменитый Norton Commander. Ныне CP866 используется для программ под Windows, работающих в текстовых окнах или в полноэкранном текстовом режиме, включая FAR Manager.

Тексты в CP866 в последние годы встречаются довольно редко (зато она используется для кодирования русских имен файлов в Windows). Поэтому мы подробнее остановимся на двух других кодировках - КОИ-8R и CP1251.



Как можно заметить, в таблице кодировки CP1251 русские буквы расположены в алфавитном порядке (за исключением, правда, буквы Ё). Благодаря такому расположению компьютерным программам очень просто осуществлять сортировку по алфавиту.

А вот в КОИ-8R порядок русских букв кажется случайным. Но на самом деле это не так.

Во многих старых программах при обработке или передаче текста терялся 8-й бит. (Сейчас такие программы практически “вымерли”, но в конце 80-х - начале 90-х годов они были широко распространены). Чтобы получить из 8-битного значения 7-битное, достаточно отнять от старшей цифры 8; например, E1 превращается в 61.

А теперь сравните КОИ-8R с таблицей ASCII (табл.1). Вы обнаружите, что русские буквы поставлены в чёткое соответствие с латинскими. Если исчезнет восьмой бит, строчные русские буквы превращаются в заглавные латинские, а заглавные русские - в строчные латинские. Так, E1 в КОИ-8 - это русское “А”, тогда как 61 в ASCII - латинское “a”.

Итак, КОИ-8 позволяет сохранять читаемость русского текста при потере 8-го бита. “Привет всем” превращается в “pRIWET WSEM”.

В последнее время и алфавитный порядок расположения символов в таблице кодировки, и читаемость при потере 8-го бита потеряли решающее значение. Восьмой бит в современных компьютерах не теряется ни при передаче, ни при обработке. А сортировка по алфавиту производится с учётом кодировки, а не простым сравнением кодов. (Кстати, коды CP1251 расположены не полностью по алфавиту - буква Ё не находится на своём месте).

Из-за того, что распространённых кодировок оказалось две, при работе с Интернетом (почта, просмотр Web-сайтов) иногда можно вместо русского текста увидеть бессмысленный набор букв. Например, “Я СБЮФЕМХЕЛ”. Это всего лишь слова “с уважением”; но они были закодированы в кодировке CP1251, а компьютер декодировал текст по таблице КОИ-8. Если те же слова были, наоборот, закодированы в КОИ-8, а компьютер декодировал текст по таблице CP1251, результатом будет “У ХЧБЦЕОЙЕН”.

Иногда бывает, что компьютер расшифровывает русскоязычные письма и вовсе по таблице, не предназначенной для русского языка. Тогда вместо русских букв появляются бессмысленный набор символов (например, латинские буквы восточно-европейских языков); их часто называют “крокозябрами”.

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

Для статьи использовалась информация странички http://open-office.edusite.ru/TextProcessor/p5aa1.html .

Материал взят с сайта:

Системы кодировки текста

См презентацию Двоичное кодиров.

Имеется две системы кодировки: на основе ASCII и Unicode.

В системе кодирования ASCII (American Standard Code for Information Interchange – стандартный код информационного обмена США) каждый символ представлен одним байтом, что позволяет закодировать 256 символов.

В ASCII имеется две таблицы кодирования - базовая и расширенная. Базовая таблица закрепляет значения кодов от 0 до 127, а расширенная относится к символам с номерами от 128 до 255. Этого хватит, чтобы выразить различными комбинациями восьми битов все символы английского и русского языков, как строчные, так и прописные, а также знаки препинания, символы основных арифметических действий и обще­принятые специальные символы, которые можно наблюдать на клавиатуре.

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

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

В английской части клавиатуры раньше было много стандартов, а теперь все они заменены на единый код ASCII. Для русской клавиатуры тоже существовало много стандартов: ГОСТ, ГОСТ-альтернативная, ISO (International Standard Organization - Между­народный институт стандартизации), но эти три стандарта фактически уже вымерли, хотя и могут где-то встретиться, в каких-то допотопных компьютерах или сетях.

Основная кодировка символов русского языка, которая используется в компьютерах с операционной системой Windows называется Windows-1251 , она была разработана для алфавитов кириллицы компанией Microsoft. Естественно, что в Windows-1251 закодировано абсолютное большинство русскоязычных текстов. Кстати кодировки с другим четырехзначным номером разработаны Microsoft для других распространенных алфавитов:Windows-1250 для расширенной латиницы (различные национальные латинские буквы), Windows-1252 для иврита, Windows-1253 для арабской письменности, и т.д.

Другая, менее распространенная кодировка носит название КОИ-8 (код обмена информа­цией, восьмизначный). Ее происхождение относится к 60-м годам XX века. Тогда не существовало персональных компьютеров, сети Интернет, компании Microsoftи многого другого. Но в СССР уже было довольно много ЭВМ, и для них требовалось разработать стандарт кодировки кириллицы.

Сегодня кодировка КОИ-8 имеет распространение в компьютерных сетях на терри­тории бывшего СССР и в русскоязычном секторе Интернета. Бывает так, что какой-то текст письма или еще чего-то не читается, это значит, что надо перейти из КОИ-8 или другой кодировки в Windows-1251.

В 90-х годах крупнейшие производители программного обеспечения: Microsoft, Borland, та же Adobe приняли решение о разработке другой системы кодировки текста, в которой каждому символу будет отводиться не 1, а 2 байта. Она получила название Unicode.

С помощью 2-х байтов можно закодировать 65 536 символов. Этого массива оказалось достаточно для размещения в одной таблице всех национальных алфавитов, существующих на Земле. Кроме того, в Unicode включены много различных служебных обозначений: штрих коды, азбука Морзе, азбука флагов, азбука Брайля (для слепых), знаки валют, геометрические фигуры и многое другое.

Всего Unicode насчитывает более 90 страниц, на каждой расположен какой-либо национальный или служебный алфавит. И еще около 5 тысяч символов занимает так называемая «область общего назначения», незаполненная, оставленная в качестве резерва.

Самую большую страницу (около 70% всегоUnicode) занимают китайские иероглифы, которые в Китае набирают с помощью клавиатурных наборов. Водной только Индии имеется 11 различных алфавитов, есть в Unicodeмножество экзотических названий, например: письменность канадских аборигенов. Вообще рассмотрение национальных письменностей довольно занимательно с точки зрения географии и истории.

Преимущества Unicode очевидны. Система стандартизует все национальные и служебные текстовые символы. Устраняется путаница, возникающая из-за различных национальных стандартов. Создаются даже шрифты для всех алфавитов, например Arial Unicode.

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

Кириллица занимает в Unicode места с 768 по 923 (основные знаки) и с 924 по 1023 (расширенная кириллица, различные малораспространенные национальные буквы). Если программа не адаптирована под кириллицу Unicode, то возможен вариант, когда символы текста распознаются не как кириллица, а как расширенная латиница (коды с 256 по 511). И в этом случае вместо текста на экране появляется бессмысленный набор экзотических символов.

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

Кодирование текста: 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 - всё).

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

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

ЕВЕ (End of Blockette ) - конец вложенного блока. Сегодня этот код, разделяющий между собой элементы одной записи, назвали бы «концом поля».

EOF (End of File ) - конец сообщения (конец передачи, конец файла данных).

Схема кодирования ASCII

Первая попытка стандартизировать коды символов для ЭВМ состоялась в 1963 г. в США, когда была создана первая версия стандарта ASCII (по-русски произносится как «аски »). Система кодирования получилась не совсем удачной, вызвала множество нареканий и вскоре была подготовлена вторая, более успешная версия, принятая в 1968 г. Она используется по сей день. Название стандарта расшифровывается какAmerican Standard Code for Information Interchange - Стандартный код внут-

реннего информационного обмена США. Его ввёл в действие Национальный институт стандартиза-

ции США (ANSI, American National Standard Institute).

Таблица ASCII предназначена для семиразрядного кодирования 128 различных символов (). Этого достаточно, чтобы представить строчные и прописные буквы английского алфавита, знаки препинания, цифры, знаки математических действий, а также некоторые специальные знаки, например такие, как @, #, § и другие.

Первые 32 кода таблицы ASCII (от 0 до 31) не представляются печатными знаками. Эта область отведена для размещения специальных символов:

управляющих кодов (служат для управления удаленными устройствами, например принтерами);

кодов форматирования (служат для специального оформления сообщений);

кодов-разделителей (служат для структурирования передаваемых наборов данных).

Отечественные схемы 8-разрядного кодирования текстов

Активное внедрение национальных стандартов кодирования текстовых символов относится к 70-м годам XX века. Эти процессы затронули всю Европу. Не остался в стороне и Советский Союз: были утверждены первые национальные 8-разрядные схемы кодирования.

При 8-разрядном кодировании на запись символа отводится байт, имеющий 256 различимых состояний. Это позволяет кодировать двуязычные символьные наборы, например английский и русский. Англоязычную часть размещают в нижней части таблицы (коды от 0 до 127), а национальную часть - в верхней (коды от 128 до 255).

Схема кодирования ISO-8859

Формально для России эта схема кодирования имеет наивысший приоритет, потому что утверждена Международным институтом стандартизации (ISO -International Standard Organization ). В стандарте ISO-8859 кодированию символов кириллицы (кириллицей называют письменную систему славянских языков) выделена так называемая «пятая кодовая страница», поэтому этот стандарт именуют такжеISO 8859-5 .

Нa практике документы, использующие эту схему, встречаются редко, особенно на компьютерах платформы IBM PC . Эту кодировку чаще можно встретить в документах, выполненных на компьютерах платформыSun . Несмотря на малую распространённость, эта система кодирования имеет