Як відомо, комп'ютер зберігає інформацію в двійковому вигляді, представляючи її як послідовність одиниць і нулів. Щоб перевести інформацію у форму, зручну для людського сприйняття, кожна унікальна послідовність цифр відображається на відповідний їй символ.
Однією із систем співвіднесення бінарних кодів з друкованими та керуючими символами є
При сьогоднішньому рівні розвитку комп'ютерних технологій від користувача не потрібне знання коду кожного конкретного символу. Однак загальне розуміння того, як здійснюється кодування, є вкрай корисним, а для деяких категорій фахівців зовсім необхідним.
Створення 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 |
Стандартна частина таблиці (англійська). Сюди входять малі й великі літери латинського алфавіту, десяткові цифри, розділові знаки, всілякі дужки, комерційні та інші символи. |
128 - 255 |
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 | 4A | J | 202 | CA | До | |
075 | 4B | K | 203 | CB | Л | |
076 | 4C | L | 204 | CC | М | |
077 | 4D | M | 205 | CD | Н | |
078 | 4E | N | 206 | CE | Про | |
079 | 4F | O | 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 | 5A | Z | 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 | 6A | j | 234 | EA | до | |
107 | 6B | k | 235 | EB | л | |
108 | 6C | l | 236 | EC | м | |
109 | 6D | m | 237 | ED | н | |
110 | 6E | n | 238 | EE | о | |
111 | 6F | o | 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 | 7A | z | 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, 00 | Null, порожній |
SOH, 01 | Start Of Heading, початок заголовка |
STX, 02 | Start of TeXt, початок тексту. |
ETX, 03 | End of TeXt, кінець тексту |
EOT, 04 | End of Transmission, кінець передачі |
ENQ, 05 | Enquire. Прошу підтвердження |
ACK, 06 | Висновокзнання. Підтверджую |
BEL, 07 | Bell, дзвінок |
BS, 08 | Backspace, повернення на один символ назад |
TAB, 09 | Tab, горизонтальна табуляція |
LF, 0A | Line Feed, переклад рядка. Зараз у більшості мов програмування позначається як \n |
VT, 0B | Vertical Tab, вертикальна табуляція. |
FF, 0C | Form Feed, прогін сторінки, нова сторінка |
CR, 0D | Carriage Return, повернення каретки. Зараз у більшості мов програмування позначається як \r |
SO, 0E | Shift Out, змінити колір фарбуючої стрічки в принтері. |
SI, 0F | Shift In, повернути колір фарбуючої стрічки в принтері назад |
DLE, 10 | Data Link Escape, перемикання каналу передачі даних |
DC1, 11 DC2, 12 DC3, 13 DC4, 14 | Device Control, символи керування пристроями |
NAK, 15 | Negative Acknowledgment, не підтверджую. |
SYN, 16 | Synchronization. Символ синхронізації |
ETB, 17 | End of Text Block, кінець текстового блоку |
CAN, 18 | Cancel, скасування переданого раніше |
EM, 19 | End of Medium, кінець носія даних |
SUB, 1A | Substitute, підставити. |
Ставиться дома символу, значення якого було втрачено чи зіпсовано під час передачі | 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
Пошук Яндекса по сайту та інтернет-магазину