Ко́дова сторі́нка (англ. code page) — таблиця, що зіставляє кожному значенню байта деякий символ (або його відсутність). Зазвичай код символу має розмір 8 біт, так що кодова сторінка може містити максимум 256 символів, з чого випливає різка недостатність всякої 8-бітної кодової сторінки для подання багатомовних текстів. До того ж частина символів використовується як керуюча, через що число друкованих символів рідко перевищує 223.
Історично термін code page був введений корпорацією IBM; змінні кодові сторінки використовувалися для підтримки різних мов (що мають алфавітні системи письма). Останнім часом є плутанина між терміном «кодова сторінка» і більш загальним поняттям набору символів (кодування).
Кодові сторінки сьогодні
В даний час в основному використовуються кодування двох типів: сумісні з ASCII і сумісні з EBCDIC, з переважанням перших. В ASCII-сумісних кодуваннях зафіксовано коди 95 друкованих символів та 33 керуючих («нижня» половина кодів, від 0 до 127), а решта 128 кодових позицій (від 128 до 255) використовуються для різних символів, що не входять в ASCII.
Для кодування текстів українською (російською) мовою (тобто букв кирилиці) найбільш широко застосовуються наступні кодові сторінки:
- Windows-1251, вона ж Microsoft code page 1251 (CP1251) — в системах Windows;
- Сімейство кодових сторінок KOI-8;
- Альтернативне кодування, воно ж IBM code page 866 — в системах DOS, а також у текстових вікнах Microsoft Windows (див. нижче);
- MacCyrillic — на комп'ютерах Macintosh.
Використання різних кодових сторінок створює багато незручностей як для користувачів, так і для програмістів. При спробі прочитати текстовий файл за допомогою кодової сторінки, несумісною з тією, в якій він був створений, виникають кракозябри. В останні роки отримав широке розповсюдження Unicode як альтернатива традиційним кодовим сторінкам.
Які існують проблеми кодування національних алфавітів?
- Обмеженість ASCII: Стандарт ASCII спочатку був розроблений для англійської мови та використовував 7 бітів, що дозволяло кодувати лише 128 символів. Цього недостатньо для відображення багатьох національних алфавітів, які містять додаткові літери, діакритичні знаки тощо.
- Різноманіття кодувань: Для вирішення проблеми відображення національних алфавітів було розроблено безліч різних 8-бітних кодувань (кодових сторінок). Кожна з них призначалася для певної мови або групи мов. Це призводило до проблем з сумісністю, оскільки текст, закодований в одній кодовій сторінці, міг неправильно відображатися в системі, яка використовує іншу кодову сторінку (так зване "кракозябри").
- Відсутність єдиного стандарту: До появи Unicode не існувало єдиного стандарту, який би охоплював усі існуючі писемності. Це ускладнювало обмін інформацією між різними мовними середовищами та платформами.
- Складність підтримки в програмному забезпеченні: Розробникам програмного забезпечення доводилося підтримувати безліч різних кодувань, що ускладнювало розробку та підвищувало ймовірність помилок.
- Проблеми з сортуванням і пошуком: Різні кодування могли по-різному визначати порядок символів, що призводило до некоректного сортування текстів і ускладнювало пошук.
- Різні таблиці кодів символьної інформації відрізняються за кількома ключовими параметрами:
- Кількість символів, що кодуються: Старіші кодування, такі як ASCII, підтримують обмежену кількість символів (128). Сучасніші кодування, наприклад Unicode, можуть кодувати практично всі символи, що використовуються у світі.
- Кількість бітів/байтів на символ: ASCII використовує 7 бітів на символ, розширені ASCII та більшість інших 8-бітних кодувань використовують 8 бітів (1 байт). Unicode може використовувати різну кількість байтів на символ залежно від схеми кодування (UTF-8: 1-4 байти, UTF-16: 2 або 4 байти, UTF-32: 4 байти).
- Набір символів: Кожна таблиця кодів визначає, які саме символи (літери, цифри, знаки пунктуації, керуючі символи тощо) вона кодує. Національні кодування включають символи конкретних мов.
- Спосіб кодування: Різні кодування відображають символи на різні числові значення (кодові точки) та по-різному організовують ці значення в байти. Наприклад, літера "А" матиме різні числові коди в ASCII, EBCDIC та Unicode. Як розрізняються текстові файли, створені в різних кодуваннях? Текстові файли, збережені в різних кодуваннях, відрізняються на рівні байтів:
- Послідовність байтів: Один і той самий текст, збережений у різних кодуваннях, матиме різну послідовність байтів у файлі, особливо якщо текст містить символи, відмінні від базових символів ASCII (літери англійського алфавіту, цифри та основні знаки пунктуації).
- Розмір файлу: Файли, закодовані в Unicode з використанням багатобайтових схем (наприклад, UTF-16 або UTF-8 для нелатинських символів), можуть мати більший розмір порівняно з файлами, закодованими в однобайтних кодуваннях (якщо текст містить не-ASCII символи). Для тексту, що складається лише з ASCII символів, файл у UTF-8 буде ідентичним файлу в ASCII.
- Неправильне відображення: Якщо текстовий файл, створений в одному кодуванні, відкрити за допомогою програми, яка використовує інше кодування, символи можуть відображатися неправильно у вигляді незрозумілих символів ("кракозябрів"). Це відбувається тому, що програма інтерпретує послідовність байтів файлу відповідно до своєї поточної таблиці кодів, що не відповідає фактичному кодуванню файлу.
- Наявність BOM (Byte Order Mark): Деякі Unicode-кодування (наприклад, UTF-16, UTF-8) можуть включати в початок файлу спеціальну послідовність байтів, яка називається BOM. BOM вказує на кодування файлу та порядок байтів (для багатобайтових кодувань). Наявність BOM може допомогти програмам автоматично визначати кодування файлу, але BOM не є обов'язковим. Як визначити кодування текстового файлу? Визначення кодування текстового файлу може бути складним завданням, особливо якщо файл не містить BOM. Однак існують деякі методи:
- BOM: Якщо файл починається з BOM, його кодування можна визначити за значенням BOM.
- Аналіз частоти байтів: Деякі програми та бібліотеки можуть аналізувати частоту зустрічання різних байтів та послідовностей байтів у файлі, щоб спробувати вгадати кодування (наприклад, UTF-8 має певні закономірності у багатобайтових послідовностях).
- Використання спеціальних інструментів: Існують утиліти та програмні бібліотеки, які намагаються автоматично визначити кодування файлу (наприклад, у Linux утиліта
file -i
). - Спроба відкрити в різних кодуваннях: У багатьох текстових редакторах є можливість відкрити файл, вказавши певне кодування. Якщо відкриття в одному з кодувань відображає текст коректно, ймовірно, це і є правильне кодування.
- Редаговано учнем 8 класу
![]() |
Це незавершена стаття з інформатики. Ви можете допомогти проєкту, виправивши або дописавши її. |