Кодирование символов в ПЭВМ

5.3. Кодирование символов в ПЭВМ

 

Под кодированием понимают запись данных с использованием некоторого кода.

Для представления любой информации в современных ЭВМ используются двоичные числа (двоичные коды). При вводе информации в ЭВМ специальными аппаратными и программными средствами каждый символ «преобразуется» в соответствующий двоичный код и записывается в ОЗУ или внешнюю память для последующей обработки. При выводе информации из ЭВМ осуществляется обратное преобразование: двоичный код каждого символа «переводится» во внешнее представление этого символа для его визуального отображения на устройстве вывода (например, принтер по коду символа печатает на бумаге его графический образ).

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

За основу кодирования символов в ПЭВМ, как и во многих других ЭВМ, взят код ASCII (American Standard Code for Information Interchange — американский стандартный код для обмена информацией). Он введен в 1963 г. и ставит в соответствие каждому символу семиразрядный двоичный код. Легко определить, что в коде ASCII можно представить 128 символов.

ASCII -кодировка символов приведена в табл. 5.2. Элементами изображенной матрицы являются обозначения символов, а индексами — шестнадцатеричные цифры кодов символов. Для получения шестнадцатеричного кода символа необходимо к цифре-индексу, записанной в соответствующем столбце, приписать справа цифру-индекс, размещенную в соответствующей строке матрицы. На­пример, символ G имеет код 47Н. Из шестнадцатеричного кода легко получить двоичный код путем записи каждой шестнадцатеричной цифры в двоичной системе счисления (для нашего примера получим 1000111). Если требуется по двоичному коду определить представленный им символ, то следует свернуть этот код в шестнадцатеричное число, разбить его на цифры и найти обозначение символа на пересечении столбца и строки, индексами которых являются старшая и младшая шестнадцатеричные цифры кода соответственно.

ASCII содержит две группы символов:

1) прописные и строчные латинские буквы, цифры, а также специальные знаки, т.е. символы пишущей машинки;

2) управляющие символы, используемые в коммуникационных протоколах, в частности, для передачи команд ПУ.

Эти группы символов разделены в табл. 5.2 двойной линией. Символы пишущей машинки имеют коды 20Н — 7ЕН, а управляющие символы — ООН — 1FH и 7FH.

Относительно символов пишущей машинки специальные пояснения не требуются. От­метим только, что символ с кодом 2DH — это знак «Минус», а с кодом 5FH — знак подчеркивания. Символы с кодами 27Н и 60Н также различаются между собой: первый является апострофом, а второй — знаком тупого (обратного) ударения. Символ " (один символ!) называется кавычками, & — амперсандом, # — знаком номера, ^ — стрелкой вверх, | — вертикальной чертой, ~ — знаком подчеркивания (тильдой), а @ — коммерческим «эт». Символ SP обозначает пробел (Space).

Управляющие символы стандартно интерпретируются следующим образом:

NUL   (NULI) — пустой символ, не имеющий значения (может использоваться для задержек);

SOH   (Start Of Heading) — начало заголовка (с него начинается передача блока данных);

Таблица  5.2

Таблица символов кода ASCII

 

 

STX   (Start Of Text) – начало текста (отмечает начало текста, следующего заголовка);

ETX   (End of Text) – конец текста (отмечает конец текста и начало контрольного кода);

EOT   (END Of Transmission) – конец передачи;

ENQ   (ENQuiry) – запрос подтверждения (запрашивает информацию о статусе удаленной станции);

ACK   (ACKnovledge) – подтверждение (подтверждает успешный обмен между станциями);

BEL    (BELI) – звонок (инициирует выдачу звукового сигнала);

BS       (BackSpace) – возврат на одну позицию (для отмены предыдущего символа);

HT      (Horisontal Tab) – горизонтальная табуляция;

LF       (Line Feed) – перевод строки;

VT      (Vertical Tab) – вертикальная табуляция;

FF       (Form Feed) – переход к новой странице (перевод формата);

CR      (Carriage Return) – возврат каретки;

SO       (Shift Out) – переход на нижний регистр;

SI         (Shift In) – переход на верхний регистр;

DLE    (Data Link Escape) – завершение сеанса связи;

DCi      (Device Control i) – управление устройством i ((i=1,…,4);

NA     (Negative AcKnowledge) – ошибка передачи;

SN       (SYNchronous idle) - холостые данные синхронной передачи;

ETB     (End Transmit Block) – конец передачи блока;

CAN    (CANcel)  - отмена (сигнализирует об ошибке передачи);

EM      (End of Medium) – конец носителя данных (сигнализирует о физическом конце источника данных);

SUB     (SUBstitute) – подстановка (для замены символов);

ESC      (ESCape) – переход (изменение интерпретации последующих кодов);

FS         (File Separator) – разделитель файлов;

GS         (Group Separator) – разделитель групп;

RS         (Record Separator) – разделитель записей;

US         (Unit Separator) – разделитель элементов;

DEL      (DELete) – удаление (символа).

 

В той или иной ЭВМ могут использоваться не все управляющие символы, а задействованные могут интерпретироваться несколько иначе. Использование и интепретацию управляющих сим­волов в IBM-совместимых ПЭВМ мы рассмотрим в следующем подразделе, когда станет ясно, как их вводить с клавиатуры.

С учетом легкости формирования символов из-за графического характера ПУ ПЭВМ (т.е. возможности формировать различные символы по точкам) ASCII совершенно недостаточен для представления многих полезных символов по причине того, что он содержит всего 128 кодов. Потребность в большем числе кодов особенно ощущается в случае необходимости работать на языках, алфавиты которых отличны от английского. С другой стороны, 7-разрядный двоичный код все равно занимает байт (8 разрядов). При коммуникациях между удаленными станциями дополнительный бит используется для контроля по четности (нечетности). В большинстве же ПЭВМ это не требуется и один бит в коде каждого символа остался бы незадействованным. По указанным причинам фирма IBM расширила ASCII таким образом, что каждый символ стал представляться 8-разрядным двоичным кодом. Это позволило закодировать уже 256 символов.

Зарегистрированная фирмой ШМ кодировка (кодовая страница 437, называемая американской кодировкой) используется на всех IBM-совместимых ПЭВМ во всем мире и представлена в табл. 5.3. Вместо наименований символов в ячейках матрицы даны их графические изображения на экране дисплея. Следует иметь в виду, что для получения графических изображений всех символов на экране дисплея необходимо! осуществить запись их кодов непосредственно в видеопамять или использовать одно из прерываний нижнего уровня. Попытка вывести изображение символа при помощи высокоуровневых средств файловой системы DOS не приведет к достижению желаемого результата, если символ оказывает управляющее воздействие на дисплей или трактуется DOS (либо другим используемым в настоящий момент программным продуктом) особым образом. Например, если попытаться вывести символ с кодом 07Н (BEL), то вместо появления на экране дисплея крупной точки будет выдан звуковой сигнал. Аналогично при попытке вывести символ с кодом 09Н (НТ, TAB) вместо его изображения реакция дисплея будет иной: произойдет перемещение курсора вправо до очередной позиции табуляции. На вводе символов с клавиатуры мы остановимся особо в следующем подразделе (в этом случае также имеются определенные тонкости).

Расширенный код ASCII полностью включает в себя стандарт ASCII (левая половина матрицы) и дополнительно содержит 128 кодов с единицей в старшем бите (правая половина матрицы). Среди дополнительных символов часто используемые (но не все) буквы ряда европейских алфавитов (немецкого, французского, финского и др.), буквы греческого алфавита, математические символы и символы псевдографики. Последние можно использовать при вычерчивании простейших схем и таблиц (см. столбцы В, С и D). В качестве псевдографических допускается применять и некоторые (незадействованные в ПЭВМ и DOS) управляющие символы, которые будут пере­числены в следующем подразделе.

Отметим, что символ с кодом FFH (как и ООН) не задействован и является «пустым».

В настоящее время под кодом ASCII применительно к ПЭВМ часто понимают описанное расширение ASCII.

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

Нередко для практических целей требуется иметь информацию о кодах символов в десятичной или двоичной системах счисления. Поэтому в табл. 5.4 мы представили соответствие между кодами символов в шестнадцатеричной, двоичной и десятичной системах счисления. Эта таблица аналогична табл. 5.3, но вместо графических изображений символов проставлены их десятичные коды, а индексирование элементов матрицы может вестись не только в шестнадцатеричной, но и в двоичной системе счисления. Например, по табл. 5.3 можно установить, что шестнадцате-ричным кодом символа М будет 4DH. Тогда на основании табл. 5.4 легко определить, что код этого символа в двоичной системе счисления равен 01001101, а в десятичной — 77.

Для представления символов кириллицы (букв русского алфавита) было предложено много модификаций кодовой таблицы IBM. Все они основываются на подмене некоторых символов символами кириллицы и иногда на изменении кодировки ряда символов. ГОСТом закреплена так называемая основная кодировка, в которой символы кириллицы размещены в столбцах В, С, D, Е и частично F, а символы псевдографики перенесены в столбцы 8, 9 и А. Однако эта таблица распространения не получила, так как при ее использовании не могут нормально функционировать англоязычные программные продукты, выводящие на экран дисплея псевдо­графические символы (вместо рамок, окон и таблиц получаются неприятные изображения, состоящие из русских букв).

Для устранения этого недостатка Брябрин В.М. и Чижов АА. предложили альтернативную кодировку, в которой символы псевдографики имеют те же коды, что и в таблице IBM, а русские буквы занимают столбцы 8, 9, А, Е и частично F (см. табл. 5.5), замещая буквы европейских алфавитов, буквы греческого алфавита и математические символы. В альтернативной кодировке столбец F содержит некоторые дополнительные символы псевдографики и другие символы.

Таблица  5.3

Таблица символов расширенного кода ASCII

 

 

Рассматриваемый вариант кодировки не изменяет расположения в таблице символов псевдогра­фики (столбцы В, С и D). Поэтому англоязычные программные продукты функционируют нормально. Однако русские буквы размещены несколько неудобно: их нормальная последова­тельность прерывается псевдографическими символами, вследствие чего в общем случае нельзя получить код следующей по алфавиту буквы путем прибавления единицы к коду очередной буквы. Это несколько ограничивает возможности манипулирования русскими буквами в развитых языках программирования. Тем не менее лексикографический (алфавитный) порядок следования букв все же сохранен, что в определенной степени сглаживает отмеченный недостаток альтер­нативной кодировки, позволяя, по крайней мере, сортировать слова в алфавитном порядке. До недавнего времени альтернативная кодировка была в СССР самой распространенной, да и сейчас широко применяется на отечественных ПЭВМ:

На машинах класса AT и старше альтернативную кодировку сменил ее модифицированный вариант (см. табл. 5.6). Отличие этой кодировки от прототипа состоит в том, что столбец F кодовой таблицы полностью заимствован из кодовой таблицы IBM. Целью такого «отката» назад является обеспечение большей совместимости данной таблицы с IBM-таблицей. Плата за это заключается в том, что из кодировки исключены русская буква Ё и ряд других полезных символов, включая стрелки.

Мы уже говорили о том, что фирма IBM недавно зарегистрировала кодовую страницу для СССР (теперь — СНГ). Кодировка символов в ней основывается на альтернативном варианте. Отличия состоят лишь в том, что в столбце F находятся уникальные буквы украинского и белорусского алфавитов, а также некоторые символы из кодовой таблицы IBM. Эта кодировка Представлена в табл. 5.7.

Заметим, что буквы латиницы и кириллицы одинакового начертания во всех рассмотренных кодировках имеют разное представление. Это связано с необходимостью обеспечить лексикографический порядок следования букв. Факт различия кодов одноименных букв разных алфавитов нужно обязательно учитывать при работе на ПЭВМ.

Таблица 5.14

Соответствие шестнадцатеричных, двоичных и десятичных чисел

 

Старшие

цифры

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

16-я

0

1

2

3

4

5

6

7

8

9

А

В

С

В

Е

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2-е

0000

0001

ООЮ

ООН

0100

0101

ОНО

0111

1000

1001

1010

1011

1100

1101

1110

1111

Младшие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

цифры

 

 

 

 

 

 

 

 

 

16-я

2-е

 

 

 

 

 

 

 

 

0

0000

0

16

32

48

64

80

96

112

128

144

160

176

192

208

224

240

1

0001

1

17

33

49

65

81

97

113

129

145

161

177

193

209

225

241

2

0010

2

18

34

50

66

82

98

114

130

146

162

178

194

210

226

242

3

ООН

3

19

35

51

67

83

99

115

131

147

163

179

195

211

227

243

4

0100

4

20

36

52

68

84

100

116

132

148

164

180

196

212

228

244

5

0101

5

21

37

53

69

85

101

117

133

149

165

181

197

213

229

245

6

оно

6

22

38

54

70

86

102

118

134

150

166

182

198

214

230

246

7

0111

7

23

39

55

71

87

103

119

135

151

167

183

199

215

231

247

8

1000

8

24

40

56

72

88

104

120

136

152

168

184

200

216

232

248

9

1001

9

25

41

57

73

89

105

121

137

153

169

185

201

217

233

249

A

1010

10

26

42

58

74

90

106

122

138

154

170

186

202

218

234

250

В

1011

11

27

43

59

75

91

107

123

139

155

171

187

203

219

235

251

С

1100

12

28

44

60

76

92

108

124

140

156

172

188

204

220

236

252

E

1101

13

29

45

61

77

93

109

125

141

157

173

189

205

221

237

253

Е

1110

14

30

46

62

78

93

НО

126

142

158

174

190

206

222

238

254

F

1111

15

31

47

62

79

95

111

127

143

159

175

191

207

223

239

255

 

Таблица  5.5

Таблица  символов  альтернативной  кодировки

 

Старшая цифра

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

Младшая цифра

 

 

0

 

 

0

 

P

`

p

А

Р

а

р

Ё

1

 

1

A

Q

a

q

Б

С

б

с

ё

2

"

2

B

R

b

r

В

Т

в

т

 

3

#

3

C

S

c

s

Г

У

г

у

 

4

$

4

D

T

d

t

Д

Ф

д

ф

 

5

 

§

٪

5

E

U

e

u

Е

Х

е

х

 

6

 

&

6

F

V

f

v

Ж

Ц

ж

ц

7

 

׳

7

G

W

g

w

З

Ч

з

ч

8

 

(

8

H

X

h

x

И

Ш

и

ш

9

 

)

9

I

Y

i

y

Й

Щ

й

щ

A

 

*

:

J

Z

j

z

К

Ъ

к

 

ъ

÷

B

+

;

K

[

k

{

Л

Ы

л

ы

±

C

 

,

< 

L

\

l

:

М

Ь

м

ь

 

D

-

=

M

]

m

}

Н

Э

н

э

¤

E

.

> 

N

^

n

̃

О

Ю

о

ю

F

/

?

O

_

o

П

Я

п

¬

я

 

 

Все представленные кодировки с кириллицей имеют следующий недостаток: программные продукты, выдающие сообщения и принимающие информацию от пользователя на европейских языках, не могут функционировать нормально. Поэтому такие программы неудобно использовать в СНГ, а кодовые страницы с кириллицей не могут быть приняты в европейских странах. Усилиями ряда ведущих советских программистов и руководителей совместных предприятий найдено компромиссное решение, при котором в кодовой таблице остаются буквы европейских алфавитов, добавляются символы кириллицы, а в жертву приносится часть псевдографических символов. Эта кодировка получила название европейской и также зарегистрирована фирмой IBM. Она включает латиницу, кириллицу, те же буквы европейских алфавитов, что и кодовая страница 437, а также только те символы псевдографики, которые содержатся в кодовой странице 850. Заметным недостатком данной таблицы является нарушение лексикографического порядка сле­дования букв кириллицы.

На смену базирующимся на ASCII кодировкам символов в ПЭВМ в скором времени, видимо, придет недавно созданная 16-битная кодировка Unicode. Она содержит 65536 символов, а именно:

— практически все символы большинства языков народов мира;

— элементы китайских, корейских и японских иероглифов, позволяющие строить любые иероглифы;

— специальные символы (знаки пунктуации, транскрипции, математические и технические символы, а также псевдографические символы);

Таблица  5.6

Таблица  символов модифицированной  альтернативной кодировки

 

Старшая цифра

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

Младшая цифра

 

 

0

 

 

0

 

P

`

p

А

Р

а

р

1

 

1

A

Q

a

q

Б

С

б

с

±

2

"

2

B

R

b

r

В

Т

в

т

3

#

3

C

S

c

s

Г

У

г

у

4

$

4

D

T

d

t

Д

Ф

д

ф

 

5

 

§

٪

5

E

U

e

u

Е

Х

е

х

 

6

 

&

6

F

V

f

v

Ж

Ц

ж

ц

÷

7

 

׳

7

G

W

g

w

З

Ч

з

ч

8

 

(

8

H

X

h

x

И

Ш

и

ш

ە

9

 

)

9

I

Y

i

y

Й

Щ

й

щ

-

A

 

*

:

J

Z

j

z

К

Ъ

к

 

ъ

-

B

+

;

K

[

k

{

Л

Ы

л

ы

 

C

 

,

< 

L

\

l

:

М

Ь

м

ь

©

D

-

=

M

]

m

}

Н

Э

н

э

z

E

.

> 

N

^

n

̃

О

Ю

о

ю

F

 

/

?

O

_

o

П

Я

п

¬

я

 

 

— 5000 жест для частного использования;

— резерв из 30000 мест.

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

Для удобства вычерчивания линий и таблиц, а также заполнения фона в текстовых редакторах мы выделили соответствующие символы псевдографики из рассмотренных кодировок и представили их (вместе с кодами) в табл. 5.8. Эти символы инвариантны ко всем четырем явно приведенным в данном подразделе кодировкам. Псевдографические символы разбиты на группы по функциональному признаку и изображены в центральном поле таблицы. В левом поле с той же расстановкой записаны их коды в десятичной, в правом — в шестнадцатеричной системе счисления. Порядок их ввода с клавиатуры будет обсуждаться в следующем подразделе. Заметим, что в эту таблицу затесались и четыре управляющих символа, которые не оказывают управляющих воздействий ни на принтер, ни на дисплей. Однако они могут не печататься на некоторых типах принтеров, в особенности, в сочетании с драйверами кириллицы. Эти вопросы можно уточнить по документации на Ваш принтер, где содержатся все поддерживаемые им кодовые таблицы.