Эта короткая статья краткий экскурс в историю создания кодовых страниц, о том как они работали, для чего были нужны и почему мы когда-то получали письма с кракозябрами. :)
Кодировка
Как упоминалось ранее, в текстовых файлах может храниться различная информация от простых заметок и записей электронной почты, до структурированной информации в форматах XML и JSON. Но для обработки файлов часто важна кодировка. И тут я сделаю нелогично большой отступ и экскурс в тему кодировок.
Первой кодировкой, пригодной для работы с текстом, была ASCII. Она вмещала в себя все заглавные и строчные буквы латинского алфавита (26+26=52), все цифры (еще + 10), знаки математических операций их ещё с десяток, знаки препинания, различные скобки и непечатаемые символы (в том числе символы для телетайпа). Итого 128 символов хватает впритык. Этот стандарт был разработан в США и назван ASCII (American Standard Code for Information Interchange). Раз символов меньше 128 значит их можно уместить в семи битах, а так как в байте восемь бит, то восьмой сделали контрольным, чтобы контролировать правильность передачи информации по каналам связи.
Идем дальше в некоторых латинских алфавитах букв больше 26 и тогда приходится жертвовать какими-нибудь специальными символами, чтобы уместиться в 128..., но ведь есть и другие алфавиты, как быть с ними? В кодировке ASCII всем символам места не найти... Что делать?
Со временем бит проверки правильности (контрольный) стал не нужен и стало возможным использовать 256 символов.
Затем появилась разработанная IBM технология кодовых страниц. Суть её заключается в том, сто коду из диапазона 0 - 255 сопоставляется некий графический образ (например, образ буквы "ы" кириллицы или тета из греческого алфавита) То есть символ с кодом 211 в кодовой странице CP1251 выглядит как буква У, а этот же код в кодовой странице CP1253 (греческая кодовая страница) выглядит вот так: Σ
Практически во всех кодовых страницах первые 128 кодов соответствуют таблице ASCII.
Кстати, как не трудно догадаться CP это - code page. :)
Почему есть как минимум 2 русские кодовые страницы? Это сделано для того, чтобы в тех случаях когда основную использовать не удобно, можно было бы использовать альтернативную. К слову, та, что задумывалась, как альтернативная используется чаще. Причина в том, что в основной кодировке на местах псевдографики разместились русские символы из-за этого в досовских программах, вместо символов псевдографики (полоски, уголки и пр.) возникали кириллические символы, в альтернативной кодировке, псевдографика была на своих стандартных позициях, а кириллица размещалась в других местах, потому программы выглядели нормально.
Затем появилась еще одна кодировка, которую разработал Андрей Чернов - KOI8-R (КОИ8). Не все знают о её интересной особенности - если убрать в этой кодовой странице у кириллического символа восьмой бит, то получится созвучный символ из латиницы. Вот такая транслитерация! Ну не гениально ли?! :) Например, вместо "Привет" получится "pRIVET"
В результате на компьютера в СССР использовалось 3 кодировки: основная, альтернативная и KOI8-R. Но были и вариации в альтернативной кодировке, а кроме них были разнообразные национальные варианты кодировки KOI8: украинская, белорусская, таджикская, кавказская и др.
Таким образом, нехватка кодов для национальных символов в кодировке ASCII, был решен с помощью использования кодовых страниц. Но следом появилась проблема множественности кодировок. Теперь письмо могло быть отправлено в одной кодировке, а программа получателя могла отображать его в другой кодировке и приходилось подбирать кодировку, чтоб прочесть текст... Тут то и получило большое распространение знакомое многим слово - кракозябры.
Но эти три кодировки были со времен DOS... Пришла Windows и принесла с собой четвертую кодировку Windows-1251 она же CP1251 и она же ANSI (не путать с ASCII) и даже пятую(!). Пятая кодировка - CP866 она же OEM или DOS.
Со временем популярными стали 2 кодировки: CP1251 и KOI8-R.
Решение проблемы кодировок.
Решение пришло, после начала повсеместного внедрения системы Unicode. Unicode каждому национальному символу ставит в соответствие 20-битовое число, но чаще всего хватает 16 бит. После чего проблема кодировок практически исчезла. Unicode, кстати тоже бывают разными, но об этом в другой раз....
Если статья была вам хоть сколько-нибудь интересна ставим лайк и подписываемся на канал, чтобы не пропустить новые материалы. Спасибо за прочтение.
Помогите автору канала одним из этих способов :) :
Донаты (переводы) с любых карт и yoomoney - https://yoomoney.ru/fundraise/QnZacAJpY9g.230208
Донаты на карту Сбера - 2202 2007 6729 1543
Донаты на Тинькофф - 5536 9137 9511 4657
Донаты на Открытие - 5586 2000 6614 6835
Криптокошельки:
1. Ethereum - 0x73670880Af17F42E6a641f5936E2f3Bc5a4db257
2. Bitcoin - bc1qywt6l80metclksvdzjt370r28zg9gxg5262aum
3. LiteCoin - ltc1qrwedpjt4evqhl42w2z32kks6xwysqvk3g27uqj
4. Zcash - t1YfZNFJ5Q1BQLCbC6Qo3bcueLJ53QLo4Mx