Код букви е ascii. Кодування текстової інформації

Як відомо, комп'ютер зберігає інформацію в двійковому вигляді, представляючи її як послідовність одиниць і нулів. Щоб перевести інформацію у форму, зручну для людського сприйняття, кожна унікальна послідовність цифр відображається на відповідний їй символ.

Однією із систем співвіднесення бінарних кодів з друкованими та керуючими символами є

При сьогоднішньому рівні розвитку комп'ютерних технологій від користувача не потрібне знання коду кожного конкретного символу. Однак загальне розуміння того, як здійснюється кодування, є вкрай корисним, а для деяких категорій фахівців зовсім необхідним.

Створення ASCII

У початковому вигляді кодування було розроблено в 1963 році і потім протягом 25 років двічі оновлювалося.

У вихідному варіанті таблиця символів ASCII включала 128 символів, пізніше з'явилася розширена версія, де перші 128 символів були збережені, а кодів з задіяним восьмим бітом поставлені у відповідність символи, що були відсутні.

Протягом багатьох років дане кодування було найпопулярнішим у світі. У 2006 році чільне місце посіла Latin 1252, а з кінця 2007 року до теперішнього часу лідируючу позицію міцно тримає Юнікод.

Комп'ютерна вистава ASCII

Кожен ASCII-символ має власний код, що складається з 8 знаків, що являють собою нуль або одиницю. Мінімальним числом у такому поданні є нуль (вісім нулів у двійковій системі), який є кодом першого елемента в таблиці.

Два коди у таблиці були відведені під перемикання між стандартною US-ASCII та її національним варіантом.

Після того як ASCII почала включати не 128, а 256 знаків, поширення набув варіант кодування, при якому вихідна версія таблиці була збережена в перших 128 кодах з нульовим 8-м бітом. Знаки національної писемності зберігалися у верхній половині таблиці (128-255 позиції).

Знати безпосередньо коди символів ASCII не потрібно. Розробнику програмного забезпечення зазвичай достатньо знати номер елемента таблиці, щоб за необхідності розрахувати його код, використовуючи бінарну систему.

Російська мова

Після розробки на початку 70-х років кодувань для скандинавських мов, китайської, корейської, грецької та ін., Створенням власного варіанту зайнявся і Радянський Союз. Незабаром був розроблений варіант 8-бітного кодування під назвою КОІ8, що зберігає перші 128 кодів символів ASCII і виділяє стільки ж позицій під літери національного алфавіту та додаткові знаки.

До впровадження Юнікоду КОІ8 домінувала у російському сегменті інтернету. Існували варіанти кодування як російського, так українського алфавіту.

Проблеми ASCII

Оскільки кількість елементів навіть у розширеній таблиці не перевищувала 256, можливість вміщення в одне кодування кількох різних писемностей була відсутня. У 90-ті роки в Рунеті постала проблема «крокозябр», коли тексти, набрані російськими символами ASCII, відображалися некоректно.

Проблема полягала у невідповідності кодів різних варіантів ASCII один одному. Згадаймо, що на позиціях 128-255 могли розташовуватися різні знаки, і при зміні одного кирилиці на іншу всі літери тексту замінювалися на інші, що мають ідентичний номер в іншій версії кодування.

поточний стан

З появою Юнікод популярність ASCII різко пішла на спад.

Причина цього полягає в тому, що нове кодування дозволило вмістити знаки майже всіх письмових мов. При цьому перші 128 символів ASCII відповідають тим самим символам в Юнікод.

У 2000-му ASCII була найпопулярнішим кодуванням в інтернеті і використовувалася на 60% проіндексованих «Гуглом» веб-сторінок. Вже до 2012 року частка таких сторінок впала до 17%, а місце найпопулярнішого кодування зайняв Юнікод (UTF-8).

Таким чином, ASCII є важливою частиною історії інформаційних технологій, проте її використання надалі бачиться малоперспективним.

Безліч символів, за допомогою яких записується текст, називається алфавітом.

Число символів в алфавіті – це його потужність.

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

де N – потужність алфавіту (кількість символів),

b – кількість біт (інформаційна вага символу).

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

Т.к. 256 = 28, то вага 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 уявити, як виглядатимуть слова у пам'яті комп'ютера.

Внутрішнє уявлення слів у пам'яті комп'ютера

Іноді буває так, що текст, який складається з літер російського алфавіту, отриманий з іншого комп'ютера, неможливо прочитати - на екрані монітора видно якусь "абракадабру". Це відбувається через те, що на комп'ютерах застосовується різне кодування символів російської мови.

Кожен комп'ютер має власний набір знаків, який він продає. Такий набір містить 26 великих і малих літер, цифри та спеціальні символи (точка, пробіл і тд). Символи під час переведення в цілі числа мають назву кодами. Були розроблені стандарти, щоб комп'ютери мали однакові набори кодів.

Стандарт ASCII

ASCII (American Standart Code for Inmormation Interchange) – американський стандартний код для обміну інформацією. Кожен символ ASCII має 7 бітів, тому максимальна кількість символів – 128 (таблиця 1). Коди від 0 до 1F є символами керування, які не друкуються. Безліч недрукованих символів ASCII потрібні передачі даних. Наприклад послання може складатися із символу початку заголовка SOH, самого заголовка та символу початку тексту STX, самого тексту та символу кінця тексту ETX, та символ кінця передачі EOT. Однак дані мережі передаються в пакетах, які самі відповідають за початок передачі і кінець. Отже, недруковані символи майже не використовуються.

Таблиця 1 - таблиця кодів ASCII

Число Команда Значення Число Команда Значення
0 NUL Порожній покажчик 10 DLE Вихід із системи передачі
1 SOH початок заголовка 11 DC1 Управління пристроєм
2 STX Початок тексту 12 DC2 Управління пристроєм
3 ETX Кінець тексту 13 DC3 Управління пристроєм
4 EOT Кінець передачі 14 DC4 Управління пристроєм
5 ACK Запит 15 NAK Непідтвердження прийому
6 BEL Підтвердження прийому 16 SYN Простий
7 BS Символ дзвінка 17 ETB Кінець блоку передачі
8 HT Відступ назад 18 CAN Відмітка
9 LF Горизонтальна табуляція 19 EM Кінець носія
A VT Переклад рядка 1A SUB Підрядковий індекс
B FF Вертикальна табуляція 1B ESC Вихід
C CR Переклад сторінки 1C FS Розділювач файлів
D SO Повернення каретки 1D GS Розділювач групи
E SI Перемикання на додатковий регістр 1E RS Розділювач запису
SI Перемикання на стандартний регістр 1F US Розділювач модуля
Число Символ Число Символ Число Символ Число Символ Число Символ Число Символ
20 пробіл 30 0 40 @ 50 P 60 . 70 p
21 ! 31 1 41 A 51 Q 61 a 71 q
22 32 2 42 B 52 R 62 b 72 r
23 # 33 3 43 C 53 S 63 c 73 s
24 φ 34 4 44 D 54 T 64 d 74 t
25 % 35 5 45 E 55 І 65 e 75 і
26 & 36 6 46 F 56 V 66 f 76 v
27 37 7 47 G 57 W 67 g 77 w
28 ( 38 8 48 H 58 X 68 h 78 x
29 ) 39 9 49 I 59 Y 69 i 70 y
2A 3A ; 4A J 5A Z 6A j 7A z
2B + 3B ; 4B K 5B [ 6B k 7B {
2C 3C < 4C L 5C \ 6C l 7C |
2D 3D = 4D M 5D ] 6D m 7D }
2E 3E > 4E N 5E 6E n 7E ~
2F / 3F g 4F O 5F _ 6F o 7F DEL

Стандарт Unicode

Попереднє кодування відмінно підходить для англійської мови, однак для інших мов вона не зручна. Наприклад у німецькій мові є умляути, а французькою надрядкові знаки. Деякі мови мають абсолютно різні алфавіти. Першою спробою розширення ASCII був IS646, який розширював попереднє кодування ще на 128 символів. Додані були латинські літери зі штрихами та діакритичними знаками, і отримав назву – Latin 1. Наступна спроба була IS 8859 – які містили кодову сторінку. Були ще спроби розширень, але це було не універсальним. Було створено кодування UNICODE (10646). Ідея кодування в тому, щоб приписати кожному символу єдине постійне 16-бітне значення, яке називається. вказівником коду. Усього виходить 65536 покажчиків. Для економії місця використовували Latin-1 для кодів 0 -255, легко змінюючи ASII UNICODE. Такий стандарт вирішив багато проблем, проте не всі. У зв'язку з надходженням нових слів, наприклад для японської мови необхідно підвищувати кількість термінів десь на 20 тис. Також необхідно включити шрифт брайля.

Dec Hex Символ Dec Hex Символ
000 00 спец. NOP 128 80 Ђ
001 01 спец. SOH 129 81 Ѓ
002 02 спец. STX 130 82
003 03 спец. ETX 131 83 ѓ
004 04 спец. EOT 132 84
005 05 спец. ENQ 133 85
006 06 спец. ACK 134 86
007 07 спец. BEL 135 87
008 08 спец. BS 136 88
009 09 спец. TAB 137 89
010 0Aспец. LF 138 8AЉ
011 0Bспец. VT 139 8B‹ ‹
012 0Cспец. FF 140 8CЊ
013 0Dспец. CR 141 8DЌ
014 0Eспец. SO 142 8EЋ
015 0Fспец. SI 143 8FЏ
016 10 спец. DLE 144 90 ђ
017 11 спец. DC1 145 91
018 12 спец. DC2 146 92
019 13 спец. DC3 147 93
020 14 спец. DC4 148 94
021 15 спец. NAK 149 95
022 16 спец. SYN 150 96
023 17 спец. ETB 151 97
024 18 спец. CAN 152 98
025 19 спец. EM 153 99
026 1Aспец. SUB 154 9Aљ
027 1Bспец. ESC 155 9B
028 1Cспец. FS 156 9Cњ
029 1Dспец. GS 157 9Dќ
030 1Eспец. RS 158 9Eћ
031 1Fспец. US 159 9Fџ
032 20 зчіп. SP (Пробіл) 160 A0
033 21 ! 161 A1 Ў
034 22 " 162 A2ў
035 23 # 163 A3Ћ
036 24 $ 164 A4¤
037 25 % 165 A5Ґ
038 26 & 166 A6¦
039 27 " 167 A7§
040 28 ( 168 A8Ё
041 29 ) 169 A9©
042 2A* 170 AAЄ
043 2B+ 171 AB«
044 2C, 172 AC¬
045 2D- 173 AD­
046 2E. 174 AE®
047 2F/ 175 AFЇ
048 30 0 176 B0°
049 31 1 177 B1±
050 32 2 178 B2І
051 33 3 179 B3і
052 34 4 180 B4ґ
053 35 5 181 B5µ
054 36 6 182 B6
055 37 7 183 B7·
056 38 8 184 B8е
057 39 9 185 B9
058 3A: 186 BAє
059 3B; 187 BB»
060 3C< 188 BCј
061 3D= 189 BDЅ
062 3E> 190 BEѕ
063 3F? 191 BFї
064 40 @ 192 C0 А
065 41 A 193 C1 Б
066 42 B 194 C2 У
067 43 C 195 C3 Г
068 44 D 196 C4 Д
069 45 E 197 C5 Е
070 46 F 198 C6 Ж
071 47 G 199 C7 З
072 48 H 200 C8 І
073 49 I 201 C9 Й
074 4AJ 202 CA До
075 4BK 203 CB Л
076 4CL 204 CC М
077 4DM 205 CD Н
078 4EN 206 CE Про
079 4FO 207 CF П
080 50 P 208 D0 Р
081 51 Q 209 D1 З
082 52 R 210 D2 Т
083 53 S 211 D3 У
084 54 T 212 D4 Ф
085 55 U 213 D5 Х
086 56 V 214 D6 Ц
087 57 W 215 D7 Ч
088 58 X 216 D8 Ш
089 59 Y 217 D9 Щ
090 5AZ 218 DA Ъ
091 5B[ 219 DB Ы
092 5C\ 220 DC Ь
093 5D] 221 DD Е
094 5E^ 222 DE Ю
095 5F_ 223 DF Я
096 60 ` 224 E0 а
097 61 a 225 E1 б
098 62 b 226 E2 в
099 63 c 227 E3 г
100 64 d 228 E4 д
101 65 e 229 E5 е
102 66 f 230 E6 ж
103 67 g 231 E7 з
104 68 h 232 E8 і
105 69 i 233 E9 й
106 6Aj 234 EA до
107 6Bk 235 EB л
108 6Cl 236 EC м
109 6Dm 237 ED н
110 6En 238 EE о
111 6Fo 239 EF п
112 70 p 240 F0 р
113 71 q 241 F1 з
114 72 r 242 F2 т
115 73 s 243 F3 у
116 74 t 244 F4 ф
117 75 u 245 F5 х
118 76 v 246 F6 ц
119 77 w 247 F7 год
120 78 x 248 F8 ш
121 79 y 249 F9 щ
122 7Az 250 FA ъ
123 7B{ 251 FB ы
124 7C| 252 FC ь
125 7D} 253 FD е
126 7E~ 254 FE ю
127 7FСпец. DEL 255 FF я

ASCII таблиці кодів символів Windows.
Опис спеціальних (керуючих) символів

Слід зазначити, що спочатку символи керування таблиці ASCII використовувалися для забезпечення обміну даними по телетайпу, введення даних з перфострічки і для найпростішого управління зовнішніми пристроями.
В даний час більшість керуючих символів ASCII таблиці вже не несуть це навантаження і можуть використовуватися для інших цілей.
Код Опис
NUL, 00Null, порожній
SOH, 01Start Of Heading, початок заголовка
STX, 02Start of TeXt, початок тексту.
ETX, 03End of TeXt, кінець тексту
EOT, 04End of Transmission, кінець передачі
ENQ, 05Enquire. Прошу підтвердження
ACK, 06Висновокзнання. Підтверджую
BEL, 07Bell, дзвінок
BS, 08Backspace, повернення на один символ назад
TAB, 09Tab, горизонтальна табуляція
LF, 0ALine Feed, переклад рядка.
Зараз у більшості мов програмування позначається як \n
VT, 0BVertical Tab, вертикальна табуляція.
FF, 0CForm Feed, прогін сторінки, нова сторінка
CR, 0DCarriage Return, повернення каретки.
Зараз у більшості мов програмування позначається як \r
SO, 0EShift Out, змінити колір фарбуючої стрічки в принтері.
SI, 0FShift In, повернути колір фарбуючої стрічки в принтері назад
DLE, 10Data Link Escape, перемикання каналу передачі даних
DC1, 11
DC2, 12
DC3, 13
DC4, 14
Device Control, символи керування пристроями
NAK, 15Negative Acknowledgment, не підтверджую.
SYN, 16Synchronization. Символ синхронізації
ETB, 17End of Text Block, кінець текстового блоку
CAN, 18Cancel, скасування переданого раніше
EM, 19End of Medium, кінець носія даних
SUB, 1ASubstitute, підставити.
Ставиться дома символу, значення якого було втрачено чи зіпсовано під час передачіESC, 1B
Escape Керуюча послідовністьFS, 1C
File Separator, роздільник файлівGS, 1D
Group Separator, роздільник групRS, 1E
Record Separator, роздільник записівUS, 1F
Unit Separator, роздільник юнітівDEL, 7F

Delete, стерти останній символ.

Здрастуйте, шановні читачі блогу сайт. Сьогодні ми поговоримо з вами про те, звідки беруться кракозябри на сайті та програмах, які кодування тексту існують і які з них слід використовувати. Докладно розглянемо історію їх розвитку, починаючи з базової ASCII, і навіть її розширених версій CP866, KOI8-R, Windows 1251 і закінчуючи сучасними кодуваннями консорціуму Юнікод UTF 16 і 8.

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

ASCII - базове кодування тексту для латиниці

Розвиток кодувань текстів відбувався одночасно з формуванням галузі IT, і вони за цей час встигли зазнати чималих змін. Історично все починалося з досить не милозвучної в російській вимові EBCDIC, яка дозволяла кодувати літери латинського алфавіту, арабські цифри та знаки пунктуації з символами, що управляють. ASCIIАле все ж таки відправною точкою для розвитку сучасних кодувань текстів варто вважати знамениту

(American Standard Code for Information Interchange, яка російською мовою зазвичай вимовляється як «аски»). Вона описує перші 128 символів з найбільш часто використовуваних англомовними користувачами - латинські літери, арабські цифри та розділові знаки.

Ще в ці 128 знаків, описаних в ASCII, потрапляли деякі службові символи на кшталт дужок, грат, зірочок тощо. Власне, ви самі можете їх побачити:

Але справа в тому, що за допомогою одного байта інформації можна закодувати не 128, а цілих 256 різних значень (двійка в вісім рівня дорівнює 256), тому слідом за базовою версією Аски з'явився цілий ряд розширених кодувань ASCII, у яких можна було крім 128 основних знаків закодувати ще й символи національного кодування (наприклад, російського).

Тут, напевно, варто ще трохи сказати про системи числення, які використовуються під час опису. По-перше, як ви всі знаєте, комп'ютер працює тільки з числами в двійковій системі, а саме з нулями та одиницями («бульова алгебра», якщо хтось проходив в інституті або в школі). , кожен з яких представляє собою двійку в ступеня, починаючи з нульової, і до двійки в сьомий:

Не важко зрозуміти, що всіх можливих комбінацій нулів і одиниць у такій конструкції може бути лише 256. Переводити число з двійкової системи до десяткової досить просто. Потрібно просто скласти всі ступені двійки, над якими стоять одиниці.

У нашому прикладі це виходить 1 (2 в ступені нуль) плюс 8 (два в ступені 3), плюс 32 (двійка в п'ятому ступені), плюс 64 (в шостий), плюс 128 (в сьомий). Разом отримує 233 у десятковій системі числення. Як бачите, все дуже просто.

Але якщо ви придивитеся до таблиці із символами ASCII, то побачите, що вони представлені у шістнадцятковому кодуванні. Наприклад, «зірочка» відповідає в Аскі шістнадцятковому числу 2A. Напевно, вам відомо, що в шістнадцятковій системі числення використовуються, крім арабських цифр, ще й латинські літери від A (означає десять) до F (означає п'ятнадцять).

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

Причому в лівій половині байта вважати ступеня потрібно буде знову починаючи з нульової, а не так, як показано на скріншоті. В результаті шляхом нехитрих обчислень ми отримаємо, що на скріншоті закодовано число E9. Сподіваюся, що перебіг моїх міркувань і розгадка цієї ребуса вам зрозуміли. Ну, а тепер продовжимо, власне, говорити про кодування тексту.

Розширені версії Аскі - кодування CP866 та KOI8-R із псевдографікою

Отже, ми з вами почали говорити про ASCII, яка була відправною точкою для розвитку всіх сучасних кодувань (Windows 1251, юнікод, UTF 8).

Спочатку в неї було закладено лише 128 знаків латинського алфавіту, арабських цифр та ще чогось там, але в розширеній версії з'явилася можливість використати всі 256 значень, які можна закодувати в одному байті інформації. Тобто. з'явилася можливість додати до Аски символи літер своєї мови.

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

Зрозуміло, що за векторні форми відповідають шрифти, а ось за кодування відповідає операційна система і програми, що використовуються в ній. Тобто. будь-який текст на вашому комп'ютері буде набір байтів, у кожному з яких закодований один єдиний символ цього самого тексту.

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

Отже, щоб закодувати будь-який потрібний нам символ (наприклад, з національного алфавіту), має бути виконано дві умови — векторна форма цього знака повинна бути у шрифті, що використовується, і цей символ можна було б закодувати в розширених кодуваннях ASCII в один байт. Тому таких варіантів існує ціла купа. Лише для кодування символів російської існує кілька різновидів розширеної Аски.

Наприклад, спочатку з'явилася CP866, в якій була можливість використовувати символи російського алфавіту і була розширеною версією ASCII.

Тобто. її верхня частина повністю збігалася з базовою версією Аски (128 символів латиниці, цифр і ще всякої лабуди), яка представлена ​​на наведеному трохи вище скріншоті, а ось уже нижня частина таблиці з кодуванням CP866 мала вказаний на скріншоті трохи нижче вигляд і дозволяла закодувати знаків (російські літери та всяка там псевдографіка):

Бачите, правому стовпчику цифри починаються з 8, т.к. числа з 0 до 7 відносяться до базової частини ASCII (див. перший скріншот). Т.о. російська літера «М» у CP866 матиме код 9С (вона знаходиться на перетині відповідних рядка з 9 і стовпця з цифрою С у шістнадцятковій системі числення), який можна записати в одному байті інформації, та за наявності відповідного шрифту з російськими символами ця буква без проблем з'явиться в тексті.

Звідки взялася така кількість псевдографіки в CP866? Тут річ у тому, що це кодування для російського тексту розроблялася ще ті волохаті року, коли був такого поширення графічних операційних систем як тепер. А в Досі, і подібних до неї текстових операційках, псевдографіка дозволяла хоч якось урізноманітнити оформлення текстів і тому нею рясніє CP866 і всі інші її ровесниці з розряду розширених версій Аскі.

CP866 розповсюджувала компанія IBM, але крім цього для символів російської мови було розроблено ще ряд кодувань, наприклад, до того ж типу (розширених ASCII) можна віднести KOI8-R:

Принцип її роботи залишився той самий, що й у описаної трохи раніше CP866 - кожен символ тексту кодується одним єдиним байтом. На скріншоті показано другу половину таблиці KOI8-R, т.к. перша половина повністю відповідає базовій Аскі, яка показана на першому скріншоті у цій статті.

Серед особливостей кодування KOI8-R можна відзначити те, що російські літери в таблиці йдуть не в алфавітному порядку, як це, наприклад, зробили в CP866.

Якщо подивіться на перший скріншот (базовій частині, яка входить у всі розширені кодування), то зауважте, що в KOI8-R російські літери розташовані в тих же осередках таблиці, що і співзвучні ним літери латинського алфавіту з першої частини таблиці. Це було зроблено для зручності переходу з російських символів на латинські шляхом відкидання всього одного біта (два в сьомому ступені або 128).

Windows 1251 - сучасна версія ASCII і чому вилазять кракозябри

Подальший розвиток кодувань тексту було пов'язано з тим, що набирали популярності графічні операційні системи та необхідність використання псевдографіки в них з часом зникла. В результаті виникла ціла група, яка за своєю суттю, як і раніше, були розширеними версіями Аскі (один символ тексту кодується лише одним байтом інформації), але вже без використання символів псевдографіки.

Вони належали до так званих ANSI кодувань, розроблених американським інститутом стандартизації. У просторіччя ще використовувалася назва кирилиця для варіанта з підтримкою російської мови. Прикладом такої може бути.

Вона вигідно відрізнялася від використовуваних раніше CP866 і KOI8-R тим, що місце символів псевдографіки в ній зайняли символи російської друкарні (крім знака наголосу), а також символи, що використовуються в близьких до російської слов'янських мовах (українській, білоруській і т.д.). ):

Через таку велику кількість кодувань російської мови, у виробників шрифтів і виробників програмного забезпечення постійно виникав головний біль, а у нас з вас, шановні читачі, часто вилазили ті самі горезвісні кракозябри, коли відбувалася плутанина з версією, що використовується в тексті.

Дуже часто вони вилазили при надсиланні та отриманні повідомлень електронною поштою, що спричинило створення дуже складних перекодувальних таблиць, які, власне, вирішити цю проблему докорінно не змогли, і часто користувачі для листування використовували, щоб уникнути горезвісних кракозябрів при використанні російських кодувань подібних до CP866, KOI8-R або Windows 1251.

По суті, кракозябри, що вилазять замість російського тексту, були результатом некоректного використання кодування цієї мови, яка не відповідала тій, у якій було закодовано текстове повідомлення спочатку.

Припустимо, якщо символи, закодовані за допомогою CP866, спробувати відобразити, використовуючи кодову таблицю Windows 1251, ці кракозябри (безглуздий набір знаків) і вилізуть, повністю замінивши собою текст повідомлення.

Аналогічна ситуація дуже часто виникає при форумах або блогах, коли текст з російськими символами помилково зберігається не в тому кодуванні, яке використовується на сайті за замовчуванням, або ж не в тому текстовому редакторі, який додає в код відсеб'ятину не видиму неозброєним оком.

Зрештою така ситуація з безліччю кодувань і кракозябрами, що постійно вилазять, багатьом набридла, з'явилися передумови до створення нової універсальної варіації, яка б замінила собою всі існуючі і вирішила б, нарешті, на корені проблему з появою не читаних текстів. Крім цього існувала проблема мов подібних до китайської, де символів мови було набагато більше, ніж 256.

Юнікод (Unicode) - універсальні кодування UTF 8, 16 і 32

Ці тисячі знаків мовної групи південно-східної Азії неможливо було описати в одному байті інформації, що виділявся для кодування символів у розширених версіях ASCII. В результаті було створено консорціум під назвою Юнікод(Unicode - Unicode Consortium) при співпраці багатьох лідерів IT індустрії (ті, хто виробляє софт, хто кодує залізо, хто створює шрифти), які були зацікавлені у появі універсального кодування тексту.

Першою варіацією, що вийшла під егідою консорціуму Юнікод, була UTF 32. Цифра у назві кодування означає кількість біт, яка використовується для кодування одного символу. 32 біти складають 4 байти інформації, які знадобляться для кодування одного єдиного знака в новому універсальному кодуванні UTF.

В результаті чого, той самий файл з текстом, закодований в розширеній версії ASCII і в UTF-32, в останньому випадку матиме розмір (важити) у чотири рази більше. Це погано, але тепер у нас з'явилася можливість закодувати за допомогою ЮТФ число знаків, що дорівнює двом у тридцять другий ступені ( мільярди символів, які накриють будь-яке реально необхідне значення з колосальним запасом).

Але багатьом країнам з мовами європейської групи така величезна кількість знаків використовувати в кодуванні зовсім і не було необхідності, проте при задіянні UTF-32 вони ні за що ні про що отримували чотириразове збільшення ваги текстових документів, а в результаті збільшення обсягу інтернет трафіку та обсягу даних, що зберігаються. Це багато, і таке марнотратство собі ніхто не міг дозволити.

Внаслідок розвитку Юнікоду з'явилася UTF-16, Яка вийшла настільки вдалою, що була прийнята за умовчанням як базовий простір для всіх символів, які у нас використовуються. Вона використовує два байти для кодування одного знака. Давайте подивимося, як це діло виглядає.

У операційній системі Windows ви можете пройти шляхом «Пуск» — «Програми» — «Стандартні» — «Службові» — «Таблиця символів». В результаті відкриється таблиця з векторними формами всіх встановлених у вас системі шрифтів. Якщо ви виберете в «Додаткових параметрах» набір знаків Юнікод, то зможете побачити для кожного шрифту окремо весь асортимент символів, що входять до нього.

До речі, клацнувши на будь-якому з них, ви зможете побачити його двобайтовий код у форматі UTF-16, Що складається з чотирьох шістнадцяткових цифр:

Скільки символів можна закодувати в UTF-16 за допомогою 16 бітів? 65536 (два в ступені шістнадцять), і саме це число було прийнято за базовий простір в Юнікод. Крім цього, існують способи закодувати за допомогою неї і близько двох мільйонів знаків, але обмежилися розширеним простором у мільйон символів тексту.

Але навіть ця вдала версія кодування Юнікоду не принесла особливого задоволення тим, хто писав, припустимо, програми тільки англійською мовою, бо у них після переходу від розширеної версії ASCII до UTF-16 вага документів збільшувалася в два рази (один байт на один символ в Аскі і два байти на той же символ в ЮТФ-16).

Саме для задоволення всіх і вся в консорціумі Unicode було вирішено придумати кодування змінної довжини. Її назвали UTF-8. Попри вісімку у назві, вона справді має змінну довжину, тобто. кожен символ тексту може бути закодований у послідовність завдовжки від одного до шести байт.

На практиці ж у UTF-8 використовується лише діапазон від одного до чотирьох байт, тому що за чотирма байтами коду нічого вже навіть теоретично неможливо уявити. Всі латинські знаки в ній кодуються в один байт, так само як і в старій добрій ASCII.

Що примітно, у разі кодування тільки латиниці, навіть програми, які не розуміють Юнікод, все одно прочитають те, що закодовано в ЮТФ-8. Тобто. базова частина Аскі просто перейшла в це дітище консорціуму Unicode.

Кирилічні знаки в UTF-8 кодуються в два байти, а, наприклад, грузинські - в три байти. Консорціум Юнікод після створення UTF 16 і 8 вирішив основну проблему - тепер у нас у шрифтах існує єдиний кодовий простір. І тепер їх виробникам залишається лише виходячи зі своїх сил та можливостей заповнювати його векторними формами символів тексту. Зараз у набори навіть.

У наведеній вище «Таблиці символів» видно, що різні шрифти підтримують різну кількість знаків. Деякі насичені символами Юнікод шрифти можуть важити дуже пристойно. Але тепер вони відрізняються не тим, що вони створені для різних кодувань, а тим, що виробник шрифту заповнив або не заповнив єдиний кодовий простір тими чи іншими векторними формами до кінця.

Кракозябри замість російських букв - як виправити

Давайте тепер подивимося, як з'являються замість тексту кракозябри, або, як вибирається правильне кодування для російського тексту. Власне, вона задається в тій програмі, в якій ви створюєте або редагуєте цей текст, або код з використанням текстових фрагментів.

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

У верхньому меню Notepad++ є пункт «Кодіювання», де у вас буде можливість перетворити вже наявний варіант на той, який використовується на вашому сайті за замовчуванням:

У випадку сайту на Joomla 1.5 і вище, а також у випадку блогу на WordPress слід запобігти появі кракозябрів вибирати варіант UTF 8 без BOM. А що таке приставка BOM?

Справа в тому, що коли розробляли кодування ЮТФ-16, навіщось вирішили прикрутити до неї таку річ, як можливість записувати код символу як у прямій послідовності (наприклад, 0A15), так і в зворотній (150A). А для того, щоб програми розуміли, в якій послідовності читати коди, і був придуманий BOM(Byte Order Mark або, іншими словами, сигнатура), яка виражалася в додаванні трьох додаткових байтів на початок документів.

У кодуванні UTF-8 ніяких BOM передбачено в консорціумі Юнікод не було і тому додавання сигнатури (цих найбільш горезвісних додаткових трьох байтів на початок документа) деяким програмам просто заважає читати код. Тому ми завжди при збереженні файлів у ЮТФ маємо вибирати варіант без BOM (без сигнатури). Таким чином, ви заздалегідь убезпечте себе від вилазу кракозябрів.

Що примітно, деякі програми в Windows не вміють цього робити (не вміють зберігати текст у ЮТФ-8 без BOM), наприклад, той самий горезвісний Блокнот Windows. Він зберігає документ у UTF-8, але все одно додає на його початок сигнатуру (три додаткові байти). Причому ці байти завжди будуть одні й ті самі — читати код у прямій послідовності. Але на серверах через цю дрібницю може виникнути проблема — вилізуть кракозябри.

Тому в жодному разі не користуйтеся звичайним блокнотом Windowsдля редагування документів вашого сайту, якщо не бажаєте появи кракозябрів. Кращим і найпростішим варіантом я вважаю вже згаданий редактор Notepad++, який практично не має недоліків і складається з одних переваг.

У Notepad ++ при виборі кодування у вас буде можливість перетворити текст на кодування UCS-2, яке за своєю суттю дуже близьке до стандарту Юнікод. Також у Нотепад можна буде закодувати текст в ANSI, тобто. Щодо російської мови це буде вже описана нами трохи вище за Windows 1251. Звідки береться ця інформація?

Вона прописана в реєстрі вашої операційної системи Windows - яке кодування вибирати у випадку ANSI, яке вибирати у випадку OEM (для російської мови це буде CP866). Якщо ви встановите на своєму комп'ютері іншу мову за промовчанням, то і ці кодування будуть замінені на аналогічні з розряду ANSI або OEM для тієї самої мови.

Після того, як ви в Notepad++ збережете документ у потрібному вам кодуванні або відкриєте документ із сайту для редагування, то в правому нижньому кутку редактора зможете побачити її назву:

Щоб уникнути кракозябрів, крім описаних вище дій, буде корисним прописати в його шапці вихідного коду всіх сторінок сайту інформацію про це саме кодування, щоб на сервері або локальному хості не виникло плутанини.

Взагалі, у всіх мовах гіпертекстової розмітки, крім Html, використовується спеціальне оголошення xml, в якому вказується кодування тексту.

Перш ніж розпочати розбирати код, браузер дізнається, яка версія використовується і як саме потрібно інтерпретувати коди символів цієї мови. Але що примітно, якщо ви зберігаєте документ у прийнятому за умовчанням юнікоді, це оголошення xml можна буде опустити (кодування буде вважатися UTF-8, якщо немає BOM або ЮТФ-16, якщо BOM є).

У разі документа мови Html для вказівки кодування використовується елемент Meta, який прописується між тегом Head, що відкриває і закриває:

... ...

Цей запис досить сильно відрізняється від прийнятої в , але повністю відповідає новому впроваджуваному потихеньку стандарту Html 5, і вона буде повністю правильно зрозуміла будь-якими браузерами, що використовуються на даний момент.

За ідеєю, елемент Meta із вказівкою кодування Html документа краще буде ставити якомога вище у шапці документа, щоб на момент зустрічі в тексті першого знака не базова ANSI (які правильно прочитаються завжди і в будь-якій варіації) браузер вже повинен мати інформацію про те, як інтерпретувати коди цих символів.

Удачі вам! До швидких зустрічей на сторінках блогу сайт

подивитися ще ролики можна перейшовши на
");">

Вам може бути цікаво

Що таке URL адреси, чим відрізняються абсолютні та відносні посилання для сайту
OpenServer - сучасний локальний сервер та приклад його використання для встановлення WordPress на комп'ютер
Що таке Chmod, які права доступу призначати файлам та папкам (777, 755, 666) та як це зробити через PHP
Пошук Яндекса по сайту та інтернет-магазину