Nozdr - про кодування символів

визначення

Почнемо з визначення понять. Сучасні комп'ютери зберігають всю інформацію у вигляді довічних байтів, т. Е. 8-бітових одиниць, здатних приймати значення від 0 до 255. Для того, щоб зберегти в пам'яті комп'ютера, не числову, а текстову інформацію, ми повинні визначити, яким байтом або байтами кодуватиметься кожен символ, який може зустрітися в нашому тексті. Таке відповідність між символами і кодують їх байтами і називається кодуванням символів (character set). Неважко зрозуміти, по-перше, що кожне кодування розробляється для конкретного людського мови (точніше, для конкретної писемності), і, по-друге, що для будь-якої мови таких кодувань можна придумати скільки завгодно. Знаючи людську натуру, неважко здогадатися і про те, що придумають їх набагато більше, ніж потрібно. Природно, так і сталося: найбільш розвинена на сьогодні бібліотека функцій перекодування ICU (International Components for Unicode) корпорації IBM підтримує більше 170 різних кодувань.

кодування латиниці

Розглянемо докладніше кодування тих писемностей, з якими найчастіше стикається російський розробник, т. Е. Латиниці і кирилиці. Для латиниці на сьогодні використовуються дві основні кодування: ASCII і EBCDIC. ASCII (American Standard Code for Information Interchange) - це семібітная кодова таблиця (коди символів 00 - 7F або 0 - 127 десяткові), що стала стандартом для малих і середніх комп'ютерів, а тому і стандартом для Веба. У ній байти з шестнадцатерічнимі кодами 00 - 1F і 7F використовуються для кодування керуючих (не відображаються) символів, а інші кодують такі символи:

Кодування EBCDIC (Extended Binary-Coded Decimal Interchange Code) - це восьмібітного кодування (коди символів 00 - FF або 0 - 255 десяткові), прийнята на всіх комп'ютерах IBM, крім PC. Можна було б її не згадувати, але в міру розвитку XML як основного формату транспорту даних в Мережі ми все частіше будемо стикатися з XML-файлами, згенерували на великих машинах. Тут байти з кодами 00 - 3F кодують керуючі символи, а інші використовуються так:

кодування кирилиці

Кодування «нелатинських» алфавітних писемностей влаштовані таким чином. Вони кодуються восьмибитового таблицею (1 байт = 1 символ), т. Е. Числами 00 - FF (0 - 255 десяткові) так, що молодша половина кодової таблиці (коди 00 - 7F або 0 - 127 десяткові) збігається з ASCII. а старша половина (коди 80 - FF або 128 - 255 десяткові) містить національну кодування, т. е. російські букви в російських кодових таблицях, турецькі в турецьких і т. д. Така організація національних кодових таблиць дозволяє правильно відображати і обробляти латинські букви, цифри і розділові знаки на будь-якому комп'ютері, незалежно від його установок системи. Саме так, зокрема, влаштовані і російські кодові таблиці, так що ми можемо в подальшому розглядати тільки старшу їх половину.

Історія російських кодувань - це приклад плутанини, рідкісної навіть для нашої комп'ютерної дійсності. Радянські стандартизуючі організації брали ГОСТи, виробники комп'ютерів (Apple) і операційних систем (Microsoft) їх дружно ігнорували і вводили власні кодування. В результаті ми отримали спадок з чотирьох різних ГОСТів, два кодування від Microsoft (для DOS і для Windows) і кодування від Apple для Mac # 'ов (все, природно, несумісні між собою). Ті, хто цікавиться подробицями можуть звернутися до сторінці The Cyrillic Charset Soup.

На щастя, сьогодні немає потреби детально описувати всі ці кодування, оскільки в Рунеті вижили тільки дві з них. Перша - це КОІ8-Р (ЯКІ означає Код для Обміну та обробки Інформації, Р відрізняє російську кодову таблицю від української, КОІ8-У). КОІ8-Р була зареєстрована Андрієм Черновим з Релкоме як RFC 1489 і має вигляд:

КОІ8-Р є стандартом de facto для всіх служб Інтернету, крім WWW. Зокрема, всі служби електронної пошти і новин Рунета працюють в цьому кодуванні. Що стосується Інтернету, то тут ситуація складніша. Справа в тому, що більше 90% клієнтських комп'ютерів Мережі працює під управлінням Windows різних версій. Windows використовує власну систему кодування російських букв, яку прийнято називати по номеру кодової сторінки Windows-1251 або CP1251:

двобайтові кодування

Не слід думати, що всі національні кодування є байтовими, т. Е. Слідують правилу: 1 символ = 1 байт. Насправді, це справедливо тільки для алфавітних (буквено-звукових) систем писемності. З іншого боку, існують силлабические системи письма, в яких кожен символ представляє не звук, а склад, наприклад, індійські і далекосхідні складові абетки. Оскільки складів в мові набагато більше, ніж окремих звуків, старших 128 байтів кодової таблиці просто недостатньо для їх подання. Це призводить до того, що такі писемності використовують двобайтові кодування (DBCS, Double Byte Character Sets). Типовим прикладом такої кодування є японська кодування JIS, існуюча в декількох варіантах. Вона охоплює латинські букви і цифри, обидві японські складові абетки (катакану і хирагану) і найважливіші з китайських ієрогліфів. Але повноцінне уявлення ієрогліфічним писемності Китаю, Японії і Кореї, що налічує кілька тисяч ієрогліфів, в рамках національних кодувань залишається неможливим.

Недоліки національних кодувань

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

З цієї ж причини виявляється практично неможливим поєднання декількох кодових таблиць в одному документі. Це веде до «друкарською бідності» текстових документів, оскільки величезне число корисних символів, що не входять в дану національну кодування, викидається за борт.

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

У міру того, як комп'ютери ставали могутніше, Інтернет - розгалужена, а операційні системи - більш дружелюбним до користувача, перераховані недоліки виявлялися все більш серйозною перешкодою на шляху до створення природних інтерфейсів «людина-комп'ютер» і «комп'ютер-Мережа». Вихід із ситуації був досягнутий створенням стандарту Unicode, про який піде мова на наступній сторінці.

Вона, може бути, була. Коли-небудь. Раніше. Або ще тільки в планах. Але зараз її немає.

Швидше за все вона просто переїхала. Наприклад, «Бібліотека» знаходиться тепер тут → Бібліотека.

Якщо не знайшли, спробуйте пошукати на сторінках Каталог сайту. Карта сайту або в пошуку вгорі праворуч.