Інтернет Windows Android

Стандартна частина коду ascii. Кодування ASCII (American standard code for information interchange) - базова кодування тексту для латиниці

Привіт, шановні читачі блогу сайт. Сьогодні ми поговоримо з вами про те, звідки беруться кракозябри на сайті і в програмах, які кодування тексту існують і які з них слід використовувати. Детально розглянемо історію їх розвитку, починаючи від базової 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 символів латиниці, цифр і ще всякої лабуди), яка представлена \u200b\u200bна наведеному трохи вище скріншоті, а ось уже нижня частина таблиці з кодуванням CP866 мала вказаний на скріншоті трохи нижче вид і дозволяла закодувати ще 128 знаків (російські літери і всяка там псевдографіка):

Бачите, в правій колонці цифри починаються з 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 біт? 65 536 (два в ступені шістнадцять), і саме це число було прийнято за базову простір в Юникоде. Крім цього існують способи закодувати за допомогою неї і близько двох мільйонів знаків, але обмежилися розширеним простором в мільйон символів тексту.

Але навіть ця вдала версія кодування Юнікоду не принесла особливого задоволення тим, хто писав, припустимо, програми тільки на англійській мові, бо у них, після переходу від розширеної версії 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
Пошук Яндекса по сайту і інтернет-магазину

накладення символів

Завдяки символу BS (повернення на крок) на принтері можна друкувати один символ поверх іншого. В ASCII було передбачено додавання таким чином діакрітікі до букв, наприклад:

  • a BS "→ á
  • a BS `→ à
  • a BS ^ → â
  • o BS / → ø
  • c BS, → ç
  • n BS ~ → ñ

Примітка: В старих шрифтах апостроф "малювався з нахилом вліво, а тильда ~ була зрушена вгору, так що вони якраз підходили на роль Акута і тильди зверху.

Якщо на символ накладається той же символ, то виходить ефект жирного шрифту, а якщо на символ накладається підкреслення, то виходить підкреслений текст.

  • a BS a → a
  • a BS _ → a

Примітка: Це використовується, наприклад, в довідковій системі man.

Національні варіанти ASCII

Стандарт ISO 646 (ECMA-6) передбачає можливість розміщення національних символів на місці @ [ \ ] ^ ` { | } ~ . На додаток до цього, на місці # може бути розміщений £ , А на місці $ - ¤ . Така система добре підходить для європейських мов, де потрібні лише кілька додаткових символів. Варіант ASCII без національних символів називається US-ASCII, або «International Reference Version».

Згодом виявилося зручніше використовувати 8-бітові кодування (кодові сторінки), де нижню половину кодової таблиці (0-127) займають символи US-ASCII, а верхню (128-255) - додаткові символи, включаючи набір національних символів. Таким чином, верхня половина таблиці ASCII до повсюдного впровадження Юникода активно використовувалася для подання локалізованих символів, букв місцевої мови. Відсутність єдиного стандарту розміщення кириличних символів в таблиці ASCII доставляло безліч проблем з кодуваннями (ЯКІ-8, Windows-1251 та інші). Інші мови з нелатинських писемністю теж страждали через наявність кількох різних кодувань.

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
0. NUL SOM EOA EOM EQT WRU RU BELL BKSP HT LF VT FF CR SO SI
1. DC 0 DC 1 DC 2 DC 3 DC 4 ERR SYNC LEM S 0 S 1 S 2 S 3 S 4 S 5 S 6 S 7
2.
3.
4. BLANK ! " # $ % & " ( ) * + , - . /
5. 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
6.
7.
8.
9.
A. @ A B C D E F G H I J K L M N O
B. P Q R S T U V W X Y Z [ \ ]
C.
D.
E. a b c d e f g h i j k l m n o
F. p q r s t u v w x y z ESC DEL

На тих комп'ютерах, де мінімально адресується одиницею пам'яті було 36-бітове слово, спочатку використовували 6-бітові символи (1 слово \u003d 6 символів). Після переходу на ASCII на таких комп'ютерах в одному слові стали розміщувати або 5 семібітних символів (1 біт залишався зайвим), або 4 девятібітних символу.

ASCII-коди використовуються також для визначення натиснутоюклавіші при програмуванні. Для стандартної QWERTY-клавіатури таблиця кодів виглядає наступним чином:

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

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

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

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

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

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

Оскільки 256 \u003d 2 8, то вага 1 символу - 8 біт.

Одиниці виміру 8 біт присвоїли назву 1 байт:

1 байт \u003d 8 біт.

Двійковий код кожного символу в комп'ютерному тексті займає 1 байт пам'яті.

Яким же чином текстова інформація представлена \u200b\u200bв пам'яті комп'ютера?

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

Тепер виникає питання, який саме восьмизарядний двійкового коду поставити у відповідність кожному символу.

Зрозуміло, що це справа умовне, можна придумати безліч способів кодування.

Всі символи комп'ютерного алфавіту пронумеровані від 0 до 255. Кожному номеру відповідає восьмизарядний двійковий код від 00000000 до 11111111. Цей код просто порядковий номер символу в двійковій системі числення.

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

для різних типів ЕОМ використовуються різні таблиці кодування.

Міжнародним стандартом для ПК стала таблиця ASCII(Читається аски) (Американський стандартний код для інформаційного обміну).

Таблиця кодів ASCII ділиться на дві частини.

Міжнародним стандартом є лише перша половина таблиці, тобто символи з номерами від 0 (00000000), до 127 (01111111).

Структура таблиці кодування ASCII

Порядковий номер

код

символ

0 - 31

00000000 - 00011111

Символи з номерами від 0 до 31 прийнято називати керуючими.
Їх функція - управління процесом виведення тексту на екран або друк, подача звукового сигналу, розмітка тексту і т.п.

32 - 127

00100000 - 01111111

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

128 - 255

10000000 - 11111111

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

Перша половина таблиці кодів ASCII


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

Для букв російського алфавіту також дотримується принцип послідовного кодування.

Друга половина таблиці кодів ASCII


На жаль, в даний час існують п'ять різних кодувань кирилиці (КОІ8-Р, Windows. MS-DOS, Macintosh і ISO). Через це часто виникають проблеми з перенесенням російського тексту з одного комп'ютера на інший, з однієї програмної системи в іншу.

Хронологічно одним з перших стандартів кодування російських букв на комп'ютерах був КОІ8 ( "Код обміну інформацією, 8-бітний"). Це кодування застосовувалася ще в 70-ті роки на комп'ютерах серії ЄС ЕОМ, а з середини 80-х стала використовуватися в перших русифікованих версіях операційної системи UNIX.

Від початку 90-х років, часу панування операційної системи MS DOS, залишається кодування CP866 ( "CP" означає "Code Page", "кодова сторінка").

Комп'ютери фірми Apple, що працюють під управлінням операційної системи Mac OS, використовують свою власну систему кодування Mac.

Крім того, Міжнародна організація по стандартизації (International Standards Organization, ISO) затвердила в якості стандарту для російської мови ще одне кодування під назвою ISO 8859-5.

Найбільш поширеною в даний час є кодування Microsoft Windows, Що позначається скороченням CP1251.

З кінця 90-х років проблема стандартизації символьного кодування вирішується введенням нового міжнародного стандарту, який називається Unicode. Це 16-розрядна кодування, тобто в ній на кожен символ відводиться 2 байти пам'яті. Звичайно, при цьому обсяг займаної пам'яті збільшується в 2 рази. Але зате така кодова таблиця допускає включення до 65536 символів. Повна специфікація стандарту Unicode включає в себе всі існуючі, вимерлі і штучно створені алфавіти світу, а також безліч математичних, музичних, хімічних та інших символів.

Спробуємо за допомогою таблиці ASCII уявити, як будуть виглядати слова в пам'яті комп'ютера.

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

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

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

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

Слід зазначити, що спочатку керуючі символи таблиці ASCII використовувалися для забезпечення обміну даними по телетайпу, введення даних з перфострічки і для найпростішого управління зовнішніми пристроями.
В даний час більшість з керуючих символів ASCII таблиці вже не несуть цю навантаження і можуть використовуватися для інших цілей.
код опис
NUL, 00Null, порожній
SOH, 01Start Of Heading, початок заголовка
STX, 02Start of TeXt, початок тексту.
ETX, 03 End of TeXt, кінець тексту
EOT, 04End of Transmission, кінець передачі
ENQ, 05Enquire. прошу підтвердження
ACK, 06Acknowledgement. підтверджую
BEL, 07Bell, дзвінок
BS, 08Backspace, повернення на один символ назад
TAB, 09Tab, горизонтальна табуляція
LF, 0ALine Feed, переклад рядка.
Зараз в більшості мов програмування позначається як \\ n
VT, 0BVertical Tab, вертикальна табуляція.
FF, 0CForm Feed, прогін сторінки, нова сторінка
CR, 0DCarriage 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, 15Negative Acknowledgment, не підтверджую.
SYN, 16Synchronization. символ синхронізації
ETB, 17End of Text Block, кінець текстового блоку
CAN, 18Cancel, скасування переданого раніше
EM, 19End of Medium, кінець носія даних
SUB, 1ASubstitute, підставити. Ставиться на місці символу, значення якого було втрачено або зіпсовано при передачі
ESC, 1BEscape Керуюча послідовність
FS, 1CFile Separator, роздільник файлів
GS, 1DGroup Separator, роздільник груп
RS, 1ERecord Separator, роздільник записів
US, 1FUnit Separator, роздільник юнітів
DEL, 7FDelete, стерти останній символ.

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

Загальновизнаним стандартом стала таблиця ASCII (American Standard Code for Information Interchange). Перші 32 символу таблиці ASCII (від 00 до 1F) використовувалися для недрукованих символів. Вони були призначені для управління друкуючим пристроєм і т.п. Інша частина - від 20 до 7F - звичайні (друкуються) символи.

Таблиця 1 - кодування ASCII

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

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

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

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

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

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

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

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

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

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

Тексти в CP866 в останні роки зустрічаються досить рідко (зате вона використовується для кодування російських імен файлів в Windows). Тому ми докладніше зупинимося на двох інших кодуваннях - ЯКІ-8R і CP1251.



Як можна помітити, в таблиці кодування CP1251 російські літери розташовані в алфавітному порядку (за винятком, щоправда, букви Е). Завдяки такому розташуванню комп'ютерним програмам дуже просто здійснювати сортування за алфавітом.

А ось в ЯКІ-8R порядок російських букв здається випадковим. Але насправді це не так.

У багатьох старих програмах при обробці або передачі тексту губився 8-й біт. (Зараз такі програми практично "вимерли", але в кінці 80-х - початку 90-х років вони були широко поширені). Щоб отримати з 8-бітного значення 7-бітове, досить відняти від старшої цифри 8; наприклад, E1 перетворюється в 61.

А тепер порівняйте ЯКІ-8R з таблицею ASCII (табл.1). Ви виявите, що російські букви поставлені в точну відповідність з латинськими. Якщо зникне восьмий біт, рядкові російські букви перетворюються в великі латинські, а великі російські - в малі латинські. Так, E1 в ЯКІ-8 - це російське "А", тоді як 61 в ASCII - латинське "a".

Отже, ЯКІ-8 дозволяє зберігати читаність російського тексту при втраті 8-го біта. "Привіт усім" перетворюється в "pRIWET WSEM".

Останнім часом і алфавітний порядок розташування символів в таблиці кодування, і читаність при втраті 8-го біта втратили вирішальне значення. Восьмий біт в сучасних комп'ютерах не губиться ні при передачі, ні при обробці. А сортування за алфавітом проводиться з урахуванням кодування, а не простим порівнянням кодів. (До речі, коди CP1251 розташовані в повному обсязі за алфавітом - буква Е не перебуває на своєму місці).

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

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

У більшості випадків сучасні програми справляються з визначенням кодувань документів Інтернету ( електронних листів і Web-сторінок) самостійно. Але іноді вони "дають осічку", і тоді можна побачити дивні послідовності російських букв або ж "крокозябри". Як правило, щоб в такій ситуації вивести на екран справжній текст, досить вибрати кодування вручну в меню програми.

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

Матеріал взято з сайту: