Кодування KOI8-R. Що за кодування KOI8-R і що воно дало? Таблиця кодування коі 8 російські літери

Головна / Корисна інформація

- Замполіт (@ComradZampolit) 17 серпня 2017 р.

Як працює KOI8-R?

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

Такий код обміну інформацією застосовувався у сімдесяті роки на комп'ютерах серії ЄС ЕОМ, а з середини вісімдесятих його почали використовувати у перших русифікованих версіях операційної системи UNIX.

Кодування полягало в тому, що кожному символу присвоювався унікальний код: від 00000000 до 11111111. Таким чином, людина розрізняла символи за накресленням, а комп'ютер - за їх кодом.

Чи використовується зараз кодування Чернова?

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

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

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

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

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

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

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

Саме ці 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
Пошук Яндекса по сайту та інтернет-магазину

Кодування KOI8-R

Кодування ISO 8859-5

ISO 8859-5

Альтернативне кодування

«Альтернативне кодування»- заснована на CP437 кодова сторінка, де всі специфічні європейські символи у другій половині замінені кирилицею, залишаючи псевдографічні символи незайманими. Отже, це не псує вигляд програм, що використовують для роботи текстові вікна, а також забезпечує використання символів кирилиці.

Історично існувало багато варіантів альтернативного кодування, але всі відмінності стосуються лише області 0xF0 – 0xFF (240-255). Остаточним стандартом стало кодування IBM CP866, підтримка якої була додана в MS-DOS версії 6.22 (до цього використовувалися всілякі «самопальні» русифікатори. Альтернативне кодування все ще живе і надзвичайно популярне серед DOS і OS/2. Крім того, в цьому кодуванні імена в файловій системі FAT. CP866 досі використовується у консолі русифікованих систем сімейства Windows NT.

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
8. А 410 Б 411 У 412 Г 413 Д 414 Е 415 Ж 416 З 417 І 418 Й 419 До 41A Л 41B М 41C Н 41D Про 41E П 41F
9. Р 420 З 421 Т 422 У 423 Ф 424 Х 425 Ц 426 Ч 427 Ш 428 Щ 429 Ъ 42A Ы 42B Ь 42C Е 42D Ю 42E Я 42F
A. а 430 б 431 432 г 433 д 434 е 435 ж 436 з 437 та 438 й 439 до 43A л 43B м 43C н 43D про 43E п 43F
B. ░ 2591 ▒ 2592 ▓ 2593 │ 2502 ┤ 2524 ╡ 2561 ╢ 2562 ╖ 2556 ╕ 2555 ╣ 2563 ║ 2551 ╗ 2557 ╝ 255D ╜ 255C ╛ 255B ┐ 2510
C. └ 2514 ┴ 2534 ┬ 252C ├ 251C ─ 2500 ┼ 253C ╞ 255E ╟ 255F ╚ 255A ╔ 2554 ╩ 2569 ╦ 2566 ╠ 2560 ═ 2550 ╬ 256C ╧ 2567
D. ╨ 2568 ╤ 2564 ╥ 2565 ╙ 2559 ╘ 2558 ╒ 2552 ╓ 2553 ╫ 256B ╪ 256A ┘ 2518 ┌ 250C █ 2588 ▄ 2584 ▌ 258C ▐ 2590 ▀ 2580
E. р 440 з 441 т 442 у 443 ф 444 х 445 ц 446 год 447 ш 448 щ 449 ъ 44A 44B ь 44C е. 44D ю 44E я 44F
F. Е 401 е 451 Є 404 є 454 Ї 407 ї 457 У 40E у 45E ° B0 ∙ 2219 · B7 √ 221A № 2116 ¤ A4 ■ 25A0 A0

SO 8859-5- 8-бітове кодування із серії ISO-8859 для запису кирилиці. У Росії її майже не вживається. В цілому ISO 8859-5 - не дуже зручне кодування, оскільки в ньому відсутні багато потрібних символів, таких як тире (-), лапки-ялинки («»), градус (°) та ін.



.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
8. 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
9. 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A. A0 Е 401 А 402 403 Є 404 Ѕ 405 І 406 Ї 407 Ј 408 До 409 М 40A Про 40B N 40C AD У 40E П 40F
B. А 410 Б 411 У 412 Г 413 Д 414 Е 415 Ж 416 З 417 І 418 Й 419 До 41A Л 41B М 41C Н 41D Про 41E П 41F
C. Р 420 З 421 Т 422 У 423 Ф 424 Х 425 Ц 426 Ч 427 Ш 428 Щ 429 Ъ 42A Ы 42B Ь 42C Е 42D Ю 42E Я 42F
D. а 430 б 431 432 г 433 д 434 е 435 ж 436 з 437 та 438 й 439 до 43A л 43B м 43C н 43D про 43E п 43F
E. р 440 з 441 т 442 у 443 ф 444 х 445 ц 446 год 447 ш 448 щ 449 ъ 44A 44B ь 44C е. 44D ю 44E я 44F
F. № 2116 е 451 Р 452 ѓ 453 є 454 ѕ 455 і 456 ї 457 ј 458 љ 459 њ 45A ћ 45B ќ 45C § A7 у 45E Я 45F

КОІ-8 (код обміну інформацією, 8 бітів), KOI8- восьмибітовий стандарт кодування символів в інформатиці. Розроблено для кодування букв кириличних абеток. Існує також семибітова версія кодування – КОІ-7. КОІ-7 та КОІ-8 описані в ГОСТ 19768-74 (зараз недійсний).

Розробники КОІ-8 розмістили символи російського алфавіту у верхній частині розширеної таблиці ASCII таким чином, що позиції кириличних символів відповідають їх фонетичним аналогам в англійському алфавіті в нижній частині таблиці. Це означає, що якщо в тексті, написаному в КОІ-8, прибирати восьмий біт кожного символу, то виходить «читальний» текст, хоча він написаний латинськими символами. Наприклад, слова «Російський Текст» перетворилися б на «rUSSKIJ tEKST». Як побічний наслідок, символи кирилиці опинилися не в алфавітному порядку.

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
8. ─ 2500 │ 2502 ┌ 250C ┐ 2510 └ 2514 ┘ 2518 ├ 251C ┤ 2524 ┬ 252C ┴ 2534 ┼ 253C ▀ 2580 ▄ 2584 █ 2588 ▌ 258C ▐ 2590
9. ░ 2591 ▒ 2592 ▓ 2593 ⌠ 2320 ■ 25A0 ∙ 2219 √ 221A ≈ 2248 ≤ 2264 ≥ 2265 A0 ⌡ 2321 ° B0 ² B2 · B7 ÷ F7
A. ═ 2550 ║ 2551 ╒ 2552 е 451 ╓ 2553 ╔ 2554 ╕ 2555 ╖ 2556 ╗ 2557 ╘ 2558 ╙ 2559 ╚ 255A ╛ 255B ╜ 255C ╝ 255D ╞ 255E
B. ╟ 255F ╠ 2560 ╡ 2561 Е 401 ╢ 2562 ╣ 2563 ╤ 2564 ╥ 2565 ╦ 2566 ╧ 2567 ╨ 2568 ╩ 2569 ╪ 256A ╫ 256B ╬ 256C © A9
C. ю 44E а 430 б 431 ц 446 д 434 е 435 ф 444 г 433 х 445 та 438 й 439 до 43A л 43B м 43C н 43D про 43E
D. п 43F я 44F р 440 з 441 т 442 у 443 ж 436 432 ь 44C 44B з 437 ш 448 е. 44D щ 449 год 447 ъ 44A
E. Ю 42E А 410 Б 411 Ц 426 Д 414 Е 415 Ф 424 Г 413 Х 425 І 418 Й 419 До 41A Л 41B М 41C Н 41D Про 41E
F. П 41F Я 42F Р 420 З 421 Т 422 У 423 Ж 416 У 412 Ь 42C Ы 42B З 417 Ш 428 Е 42D Щ 429 Ч 427 Ъ 42A

Кодування KOI8-U (українська)

КОІ-8 стала першим російським стандартизованим кодуванням в інтернеті.

IETF затвердив кілька RFC за варіантами кодування KOI-8:

  • RFC 1489 – KOI8-R (літери російського алфавіту);
  • RFC 2319 – KOI8-U (літери українського алфавіту);
  • RFC 1345 – ISO-IR-111 (з помилкою у визначенні основного діапазону).

У наведених таблицях числа під літерами позначають шістнадцятковий код літери в Юнікод.

Кодування KOI8-R (російська)

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F

8.

2500

2502

250C

2510

2514

2518

251C

2524

252C

2534

253C

2580

2584

2588

258C

2590

9.

2591

2592

2593

2320

25A0

2219

221A

2248

2264

2265

A0

2321
°
B0
²
B2
·
B7
÷
F7

A.

2550

2551

2552
е
451

2553

2554

2555

2556

2557

2558

2559

255A

255B

255C

255D

255E

B.

255F

2560

2561
Ё
401

2562

2563

2564

2565

2566

2567

2568

2569

256A

256B

256C
©
A9

C.
ю
44E
а
430
б
431
ц
446
д
434
е
435
ф
444
г
433
х
445
і
438
й
439
до
43A
л
43B
м
43C
н
43D
про
43E

D.
п
43F
я
44F
р
440
з
441
т
442
у
443
ж
436
в
432
ь
44C
ы
44B
з
437
ш
448
е
44D
щ
449
год
447
ъ
44A

E.
Ю
42E
А
410
Б
411
Ц
426
Д
414
Е
415
Ф
424
Г
413
Х
425
І
418
Й
419
До
41A
Л
41B
М
41C
Н
41D
Про
41E

F.
П
41F
Я
42F
Р
420
З
421
Т
422
У
423
Ж
416
У
412
Ь
42C
Ы
42B
З
417
Ш
428
Е
42D
Щ
429
Ч
427
Ъ
42A

Інші варіанти

Показані тільки рядки таблиць, що не збігаються, оскільки все інше збігається.

Кодування KOI8-U (російсько-українське)

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F

A.

2550

2551

2552
е
451
є
454

2554
і
456
ї
457

2557

2558

2559

255A

255B
ґ
491

255D

255E

B.

255F

2560

2561
Ё
401
Є
404

2563
І
406
Ї
407

2566

2567

2568

2569

256A
Ґ
490

256C
©
A9

Кодування KOI8-RU (російсько-білорусько-українське)

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F

A.

2550

2551

2552
е
451
є
454

2554
і
456
ї
457

2557

2558

2559

255A

255B
ґ
491
ў
45E

255E

B.

255F

2560

2561
Ё
401
Є
404

2563
І
406
Ї
407

2566

2567

2568

2569

256A
Ґ
490
Ў
40E
©
A9

Кодування KOI8-C (Центральна Азія)

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
8. ғ
493
җ
497
қ
49B
ҝ
49D
ң
4A3
ү
4AF
ұ
4B1
ҳ
4B3
ҷ
4B7
ҹ
4B9
һ
4BB

2580
ә
4D9
ӣ
4E3
ө
4E9
ӯ
4EF
9. Ғ
492
Җ
496
Қ
49A
Ҝ
49C
Ң
4A2
Ү
4AE
Ұ
4B0
Ҳ
4B2
Ҷ
4B6
Ҹ
4B8
Һ
4BA

2321
Ә
4D8
Ӣ
4E2
Ө
4E8
Ӯ
4EE
A.
A0
ђ
452
ѓ
453
е
451
є
454
ѕ
455
і
456
ї
457
ј
458
љ
459
њ
45A
ћ
45B
ќ
45C
ґ
491
ў
45E
џ
45F
B.
2116
Ђ
402
Ѓ
403
Ё
401
Є
404
Ѕ
405
І
406
Ї
407
Ј
408
Љ
409
Њ
40A
Ћ
40B
Ќ
40C
Ґ
490
Ў
40E
Џ
40F

Кодування KOI8-T (таджицьке)

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
8. қ
49B
ғ
493

201A
Ғ
492

201E

2026

2020

2021

2030
ҳ
4B3

2039
Ҳ
4B2
ҷ
4B7
Ҷ
4B6
9. Қ
49A

2018

2019

201C

201D

2022

2013
-
2014

2122

203A
A. ӯ
4EF
Ӯ
4EE
е
451
¤
A4
ӣ
4E3
¦
A6
§
A7
«
AB
¬
AC
­
AD
®
AE
B. °
B0
±
B1
²
B2
Ё
401
Ӣ
4E2

B6
·
B7

2116
»
BB
©
A9

Кодування KOI8-O, KOI8-S (слов'янська, стара орфографія)

0407
.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F

8.
Ђ
0402
Ѓ
0403
¸
00B8
ѓ
0453

201E

2026

2020
§
00A7

20AC
¨
00A8
Љ
0409

2039
Њ
040A
Ќ
040C
Ћ
040B
Џ
040F

9.
ђ
0452

2018

2019

201C

201D

2022

2013

2014
£
00A3
·
00B7
љ
0459

203A
њ
045A
ќ
045C
ћ
045B
џ
045F

A.

00A0
ѵ
0475
ѣ
0463
е
0451
є
0454
ѕ
0455
і
0456
ї
0457
ј
0458
®
00AE

2122
«
00AB
ѳ
0473
ґ
0491
ў
045E
´
00B4

B.
°
00B0
Ѵ
0474
Ѣ
0462
Ё
0401
Є
0404
Ѕ
0405
І
0406
Ї
0407
Ј
0408

2116
¢
00A2
»
00BB
Ѳ
0472
Ґ
0490
Ў
040E
©
00A9

Кодування ISO-IR-111, KOI8-E

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F

A.

00A0
ђ
0452
ѓ
0453
е
0451
є
0454
ѕ
0455
і
0456
ї
0457
ј
0458
љ
0459
њ
045A
ћ
045B
ќ
045C
­
00AD
ў
045E
џ
045F

B.

2116
Ђ
0402
Ѓ
0403
Ё
0401
Є
0404
Ѕ
0405
І
0406
Ї
0407
Ј
0408
Љ
0409
Њ
040A
Ћ
040B
Ќ
040C
¤
00A4
Ў
040E
Џ
040F

Кодування KOI8-Unified, KOI8-F

Кодування KOI8-Unified (KOI8-F) запропоновано компанією «Fingertip Software».

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F

8.

2500

2502

250C

2510

2514

2518

251C

2524

252C

2534

253C

2580

2584

2588

258C

2590

9.

2591

2018

2019

201C

201D

2022

2013

2014
©
00A9

2122

00A0
»
00BB
®
00AE
«
00AB
·
00B7
¤
00A4

A.

00A0
ђ
0452
ѓ
0453
е
0451
є
0454
ѕ
0455
і
0456
ї
0457
ј
0458
љ
0459
њ
045A
ћ
045B
ќ
045C
ґ
0491
ў
045E
џ
045F

B.

2116
Ђ
0402
Ѓ
0403
Ё
0401
Є
0404
Ѕ
0405
І
0406
Ї
0407
Ј
0408
Љ
0409
Њ
040A
Ћ
040B
Ќ
040C
Ґ
0490
Ў
040E
Џ
040F

Некириличні варіанти КОІ-8

У деяких країнах РЕВ були створені модифікації КОІ-8 для національних варіантів латиниці. Базова ідея була та сама - при «зрізанні» восьмого біта текст повинен залишатися більш менш зрозумілим.

– Ну, починати! – сказав Долохов.
- Що ж, - сказав П'єр, так само посміхаючись. - Ставало страшно. Очевидно було, що справа, яка почалася так легко, вже нічим не могла бути запобігана тому, що вона йшла сама собою, вже незалежно від волі людей, і мала відбутися. Денисов перший вийшов уперед до бар'єру і проголосив:
- Оскільки противники відмовилися від іменування, то не завгодно починати: взяти пістолети і за словом і починати сходитися.
- Г ... "аз! Два! Т" і! ... - Сердито прокричав Денисов і відійшов у бік. Обидва пішли протоптаними доріжками все ближче і ближче, в тумані впізнаючи один одного. Противники мали право, сходячи до бар'єру, стріляти, коли хтось захоче. Долохов йшов повільно, не піднімаючи пістолета, вдивляючись своїми світлими, блискучими, блакитними очима в обличчя свого супротивника. Рот його, як і завжди, мав на собі подобу посмішки.
– То коли хочу – можу стріляти! - сказав П'єр, при слові три швидкими кроками пішов уперед, збиваючись з протоптаної доріжки і крокуючи цілісним снігом. П'єр тримав пістолет, витягнувши вперед праву руку, мабуть боячись як би з цього пістолета не вбити себе. Ліву руку він старанно відставляв назад, бо йому хотілося підтримати праву руку, а він знав, що цього не можна було. Пройшовши шість кроків і збившись з доріжки в сніг, П'єр озирнувся під ноги, знову швидко глянув на Долохова, і потягнувши пальцем, як його вчили, вистрілив. Ніяк не чекаючи такого сильного звуку, П'єр здригнувся від свого пострілу, потім усміхнувся сам до свого враження і зупинився. Дим, особливо густий від туману, завадив йому бачити в першу мить; але іншого пострілу, на який він чекав, не було. Тільки чути були квапливі кроки Долохова, і з-за диму з'явилася його постать. Однією рукою він тримався за лівий бік, іншою стискав опущений пістолет. Обличчя його було бліде. Ростов підбіг і щось сказав йому.
– Не…е…т, – промовив крізь зуби Долохів, – ні, не скінчено, – і зробивши ще кілька падаючих, шкутильгаючих кроків до самої шаблі, впав на сніг біля неї. Ліва рука його була в крові, він обтер її об сурдут і сперся нею. Обличчя його було бліде, насуплене і тремтіло.
– Мабуть… – почав Долохов, але не міг одразу вимовити… – завітайте, договорив він із зусиллям. П'єр, ледве утримуючи ридання, побіг до Долохова, і хотів уже перейти простір, що відокремлює бар'єри, як Долохов гукнув: - До бар'єру! - і П'єр, зрозумівши в чому річ, зупинився біля своєї шаблі. Лише 10 кроків поділяло їх. Долохов опустився головою до снігу, жадібно вкусив сніг, знову підняв голову, погладшав, підібрав ноги і сів, відшукуючи міцний центр тяжкості. Він ковтав холодний сніг і смоктав його; губи його тремтіли, але все посміхаючись; очі блищали зусиллям і злістю останніх зібраних сил. Він підняв пістолет і став цілитися.
– Боком, закрийтеся пістолетом, – промовив Несвицький.
- 3ак"ойтесь! - не витримавши, крикнув навіть Денисов своєму противнику.
П'єр з лагідною усмішкою жалю і каяття, безпорадно розставивши ноги і руки, просто своїми широкими грудьми стояв перед Долоховим і сумно дивився на нього. Денисов, Ростов та Несвицький замружилися. Одночасно вони почули постріл і злий крик Долохова.
- Мимо! - крикнув Долохов і безсило ліг на сніг обличчям донизу. П'єр схопився за голову і, повернувшись назад, пішов у ліс, крокуючи цілком снігом і вголос примовляючи незрозумілі слова:
– Безглуздо… безглуздо! Смерть… брехня… – твердив він морщачись. Несвицький зупинив його і повіз додому.
Ростов із Денисовим повезли пораненого Долохова.
Долохов мовчки, з заплющеними очима, лежав у санях і жодного слова не відповідав на запитання, які йому робили; але, в'їхавши до Москви, він раптом прийшов до тями і, важко піднявши голову, взяв за руку Ростова, що сидів біля себе. Ростова вразив абсолютно змінений і несподівано захоплено ніжний вираз обличчя Долохова.
- Ну що? як ти відчуваєш себе? - Запитав Ростов.
- Погано! але не в тому річ. Друг мій, - сказав Долохов голосом, що переривається, - де ми? Ми у Москві, я знаю. Я нічого, але я вбив її, вбив… Вона не перенесе цього. Вона не перенесе…
– Хто? - Запитав Ростов.
- Мати моя. Моя мати, мій ангел, мій любий ангел, мати, і Долохов заплакав, стискаючи руку Ростова. Коли він трохи заспокоївся, він пояснив Ростову, що живе з матір'ю, що якщо мати побачить його вмираючим, вона не перенесе цього. Він благав Ростова їхати до неї та приготувати її.
Ростов поїхав уперед виконувати доручення, і на превеликий подив дізнався, що Долохов, цей буян, бретер Долохов жив у Москві з старенькою матір'ю і горбатою сестрою, і був найніжніший син і брат.

П'єр останнім часом рідко бачився з дружиною віч-на-віч. І в Петербурзі, і в Москві їхній будинок завжди був повний гостями. Наступної ночі після дуелі він, як і часто робив, не пішов у спальню, а залишився у своєму величезному, батьковому кабінеті, в тому самому, де помер граф Безухий.
Він ліг на диван і хотів заснути, щоб забути все, що було з ним, але він не міг цього зробити. Така буря почуттів, думок, спогадів раптом піднялася в його душі, що він не тільки не міг спати, але не міг сидіти на місці і мав схопитися з дивана і швидкими кроками ходити по кімнаті. То йому уявлялася вона спочатку після одруження, з відкритими плечима і втомленим, пристрасним поглядом, і одразу ж поруч з нею виглядало гарне, нахабне і твердо насмішкувате обличчя Долохова, яким воно було на обіді, і те ж обличчя Долохова, бліде, тремтяче. і страждало, яким воно було, коли він обернувся і впав на сніг.
«Що ж було? - Запитував він сам себе. - Я вбив коханця, так, убив коханця своєї дружини. Так, це було. Від чого? Як я дійшов до цього? - Тому, що ти одружився з нею, - відповів внутрішній голос.
«Але в чому я винен? – питав він. - У тому, що ти одружився не люблячи її, у тому, що ти обдурив і себе і її, - і йому швидко представилася та хвилина після вечері у князя Василя, коли він сказав ці слова, що не виходили з нього: "Je vous aime". [Я вас люблю.] Все від цього! Я й тоді відчував, думав він, я відчував тоді, що це не те, що я не мав на це права. Так і сталося». Він згадав медовий місяць і почервонів при цьому спогаді. Особливо жваво, образливо і ганебно був для нього спогад про те, як одного разу, незабаром після свого одруження, він о 12-й годині дня, в шовковому халаті прийшов зі спальні до кабінету, і в кабінеті застав головного керуючого, який шанобливо вклонився, подивився на обличчя П'єра, на його халат і трохи посміхнувся, ніби висловлюючи цією усмішкою шанобливе співчуття щастю свого принципала.
«А скільки разів я пишався нею, пишався її великою красою, її світським тактом, думав він; пишався тим своїм будинком, у якому вона приймала весь Петербург, пишався її неприступністю та красою. Так ось чим я пишався?! Я тоді думав, що її не розумію. Як часто, вдумуючись у її характер, я казав собі, що я винен, що не розумію її, не розумію цього повсякчасного спокою, задоволеності та відсутності будь-яких пристрастей і бажань, а вся розгадка була в тому страшному слові, що вона розпусна жінка: сказав собі це страшне слово, і все зрозуміли!
«Анатоль їздив до неї позичати в неї грошей і цілував її в голі плечі. Вона не давала йому грошей, але дозволяла цілувати себе. Батько, жартома, збуджував її ревнощі; вона зі спокійною усмішкою казала, що вона не така дурна, щоб бути ревнивою: нехай робить, що хоче, говорила вона про мене. Я запитав її якось, чи не відчуває вона ознак вагітності. Вона засміялася зневажливо і сказала, що вона не дурна, щоби бажати мати дітей, і що від мене дітей у неї не буде».
Потім він згадав грубість, ясність її думок і вульгарність виразів, властивих їй, незважаючи на її виховання у вищому аристократичному колі. «Я не якась дура… іди сам спробуй… allez vous promener», [забирайся,] говорила вона. Часто, дивлячись на її успіх в очах старих і молодих чоловіків і жінок, П'єр не міг зрозуміти, чому він не любив її. Та я ніколи не любив її, казав собі П'єр; я знав, що вона розпусна жінка, повторював він сам собі, але не наважувався зізнатися в цьому.

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

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

Розвиток кодувань текстів відбувався одночасно з формуванням галузі IT, і вони за цей час встигли зазнати чималих змін. Історично все починалося з досить не милозвучної в російській вимові EBCDIC, яка дозволяла кодувати літери латинського алфавіту, арабські цифри та знаки пунктуації з символами, що управляють. Але все ж таки відправною точкою для розвитку сучасних кодувань текстів варто вважати знамениту ASCII(American Standard Code for Information Interchange, яка російською мовою зазвичай вимовляється як «аски»). Вона описує перші 128 символів з найбільш часто використовуваних англомовними користувачами - латинські літери, арабські цифри та розділові знаки. Ще в ці 128 знаків, описаних в ASCII, потрапляли деякі службові символи на кшталт дужок, грат, зірочок тощо. Власне, ви самі можете їх побачити:
Саме ці 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 кодувань, розроблених американським інститутом стандартизації. У просторіччя ще використовувалася назва кирилиця для варіанта з підтримкою російської мови. Прикладом такої може бути Windows 1251. Вона вигідно відрізнялася від використовуваних раніше 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 вирішив основну проблему - тепер у нас у шрифтах існує єдиний кодовий простір. І тепер їх виробникам залишається лише виходячи зі своїх сил та можливостей заповнювати його векторними формами символів тексту. У наведеній вище «Таблиці символів» видно, що різні шрифти підтримують різну кількість знаків. Деякі насичені символами Юнікод шрифти можуть важити дуже пристойно. Але тепер вони відрізняються не тим, що вони створені для різних кодувань, а тим, що виробник шрифту заповнив або не заповнив єдиний кодовий простір тими чи іншими векторними формами до кінця.

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

Давайте тепер подивимося, як з'являються замість тексту кракозябри, або, як вибирається правильне кодування для російського тексту. Власне, вона задається в тій програмі, в якій ви створюєте або редагуєте цей текст, або код з використанням текстових фрагментів. Для редагування та створення текстових файлів особисто я використовую дуже хороший, на мій погляд, Html та PHP редактор Notepad++. Втім, він може підсвічувати синтаксис ще добра сотні мов програмування та розмітки, а також має можливість розширення за допомогою плагінів. Читайте докладний огляд цієї чудової програми за посиланням. У верхньому меню 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 version= "1.0" encoding= "windows-1251" ? >Перш ніж розпочати розбирати код, браузер дізнається, яка версія використовується і як саме потрібно інтерпретувати коди символів цієї мови. Але що примітно, якщо ви зберігаєте документ у прийнятому за умовчанням юнікоді, це оголошення xml можна буде опустити (кодування буде вважатися UTF-8, якщо немає BOM або ЮТФ-16, якщо BOM є). У разі документа мови Html для вказівки кодування використовується елемент Meta, який прописується між тегом Head, що відкриває і закриває: < head> . . . < meta charset= "utf-8" > . . . < / head>Цей запис досить сильно відрізняється від прийнятої в стандарті в Html 4.01, але повністю відповідає новому стандарту Html 5, що впроваджується потихеньку, і вона буде повністю правильно зрозуміла будь-якими браузерами, що використовуються на даний момент. За ідеєю, елемент Meta із вказівкою кодування Html документа краще буде ставити якомога вище у шапці документа, щоб на момент зустрічі в тексті першого знака не базова ANSI (які правильно прочитаються завжди і в будь-якій варіації) браузер вже повинен мати інформацію про те, як інтерпретувати коди цих символів. Посилання на першу

© 2022 androidas.ru - Все про Android