Comments 71
Занятная IT археология. Схожая история повлияла на порядок кириллических символов в КОИ-8. Символы располагаются в соответствии с фонетической схожестью с латинскими символами в первой половине таблицы. Таким образом, если текст попадет в 7битное окружение, то он останется в некоторой степени читаемым. Пример из википедии: слова «Русский Текст» превратятся в «rUSSKIJ tEKST». Только остается загадкой для меня почему регистр инвертировали…
Слова «Русский Текст» в КОИ-8 превратятся после отбрасывания старшего бита в «РUSSKIJ ТEKST» в КОИ-7, а слова «РУССКИЙ ТЕКСТ» в КОИ-8 – в «РУССКИЙ ТЕКСТ» в КОИ-7. А 7-битная кодировка ASCII с большими и маленькими латинскими буквами не применялась на оборудовании, использовавшемся в СССР, поэтому «rUSSKIJ tEKST» неактуален.
Вообще-то, в КОИ-7 три таблицы символов: Н0, Н1 и Н2:
- Первая — суть копия ASCII.
- Третья, Н2 — суть Н0 с заменой строчных латинских на прописные кириллические. То есть латиница и кириллица и только прописными.
- Таблица Н1 же суть Н2 с заменой латинских прописных на строчные кириллические.
В советское время производились микросхемы масочного ПЗУ знакогенератора для каждой из трёх таблиц. Системы попроще-подешевле использовали только Н2, системы подороже Н0 + Н1 с переключением страниц. Одни умели это делать автоматически (хранение бита в экранном буфере, плюс SI/SO для переключения при кодировании), в других нужно было тумблер вручную переключать (либо всё латиницей, либо всё кириллицей — любительский Радио-86РК, как пример).
P.S. Для меня загадка, почему КОИ-7, совместимая с ISO 646, не стала стандартом вместо несовместимой КОИ-8 с сопутствующими проблемами из-за графических символов в наборе C1.
:)
А КОИ-8 де-факто никогда не была стандартом. Сначала почти повсюду использовалась КОИ-7, а потом распространились PC с альтернативной кодировкой ГОСТ, на основе которой впоследствии была внедрена CP866.
КОИ-8 была de facto стандартом на UNIX и клонах. Зафиксировано как RFC 1489:
Though the proposed character set "koi8-r" is not currently an international standard, there is very large user community (including Relcom Net) supporting it. Factually, "koi8-r" is de-facto standard for Unix and global network applications in the former Soviet Union. This is the reason the Society of Unix User Groups (SUUG) believes "koi8-r" should be registered.
Другими словами, был ещё мир за пределами PC и и на PC за пределами PC/MS-DOS, MS Windows и даже OS/2.
Unix тогда был распространён меньше, чем сейчас, и даже там КОИ8 использовалась не во всех реализациях.
Зато в Linux двадцать лет назад почти все использовали либо koi8-r, либо koi8-u.
Преимуществ против КОИ-7 практически нет никаких:
- Для псевдографики всё равно использовали переключение на DEC таблицу, появившуюся в VT100, а не символы из окна C1 в КОИ-8.
- Текст на смешанном кириллическо-латинском тексте будет в КОИ-7 чуть больше за счёт одного символа SI или SO на границе кириллического и латинского текста.
Зато минус ощущали все из-за огромного количества ПО, ожидавшего в C1 управляющих кодов согласно ISO 646.
en.wikipedia.org/wiki/UTF-EBCDIC
Про электронную почту вопрос крайне спорный, так как основной русскоязычный трафик в то время шёл через фидо, в кодировке 866.
Н0 + Н1 с переключением страниц. Одни умели это делать автоматически (хранение бита в экранном буфере, плюс SI/SO для переключения при кодировании)
Помню компилятор Паскаля на ДВК, который букву щ воспринимал, как конец комментария, так как она имела одинаковый код с правой фигурной скобкой.
И в МТК-2 — совпадали коды латинские и русские буквы (каждая — на своем регистре). Если не переключить регистр — текст оставался читабельным, как сейчас говорится TRANSLITERACIEY :)
А эта идеология пришла в МТК-2 из русской версии азбуки Морзе, принятой в 1856 году :)
Порадовали :) Погуглите «mastercard ebcdic» или «amex ebcdic»…
const char s[] = "DJKFHGKJHGJ242423?==";
Не сходится — хоть ты тресни. Потом в отладчике случайно замечаю, что константа то у меня «DJKFHGKJHGJ242423#» — я чуть умом не тронулся :) Как гуглить "?==" тоже непонятно. Спасло, что под рукой оказался gcc — он выдал варнинг «trigraphs are not supported». Эта дрянь именно из EBCDIC'ов и вылезла, где не было #, {} и еще всякого. Т.е. ?==include <something.h> — корректный код :)Это просто свойство ранних терминалов, телетайпного типа. В EBCDIC эти символы есть.
Самая главная проблема с EBCDIC была в том, что в нём имелся символ отрицания ¬, отсутствовавший в ASCII.
А также в том, что в русской локализации — ДКОИ — придумали не делать для русских букв, сходных с латинскими, отдельных кодов. А поскольку сходство букв отличается для прописных и строчных, это приводило к тому, что для текста в ДКОИ невозможно было однозначно сделать upcase и lowcase: русский -> PYCCKИЙ -> pуcckий.
Потом на основании EBCDIC создали 100500 разных кодировок, где в свободные позиции напихали кто что хотел — кто фигурные скобки, кто кириллицу, кто знаки валют кроме цента и доллара…
Это просто так работал конкретный перфоратор. Были подобные же ограниченные устройства и в ASCII. Кодовую страницу 37 (EBCDIC) можно посмотреть в справочнике, там всё есть.
В частности, в кодировке КОИ7 (набор 2, если угодно) вообще нет фигурных скобок.
Вы почувствуйте разницу между кодировкой EBCDIC и представлением символов EBCDIC в устройствах S/360.
И уж явно триграфы в языке Си появились не из-за S/360, которая к моменту реализации Си была снята с производства.
При этом заметим, что, например, на небезызвестном компьютере Apple ][ базовой модели 1977 года, который к EBCDIC не имеет отношения ну никаким боком – не было фигурных скобок. Они появились только на Apple ][+ вместе со строчными буквами.
и JCUKEN раскладкой. Когда начали приходить первые PC, например, Правец, скорбь тех, кто привык к JCUKEN была непереносима.
По бокам космического корабля «Кеннеди» размещаются два двигателя по 5 футов шириной. Конструкторы корабля хотели бы сделать эти двигатели еще шире, но не смогли. Почему? Дело в том, что двигатели эти доставлялись по железной дороге, которая проходит по узкому туннелю. Расстояние между рельсами стандартное: 4 фута 8.5 дюйма, поэтому конструкторы могли сделать двигатели только шириной 5 футов. Возникает вопрос: почему расстояние между рельсами 4 фута 8.5 дюйма? Откуда взялась эта цифра? Оказывается, что железную дорогу в Штатах делали такую же, как и в Англии, а в Англии делали железнодорожные вагоны по тому же принципу, что и трамвайные, а первые трамваи производились в Англии по образу и подобию конки. А длина оси конки составляла как раз 4 фута 8.5 дюйма! Но почему? Потому что конки делали с тем расчетом, чтобы их оси попадали в колеи на английских дорогах, чтобы колеса меньше изнашивались, а расстояние между колеями в Англии как раз 4 фута 8.5 дюйма! Отчего так? Да просто дороги в Великобритании стали делать римляне, подводя их под размер своих боевых колесниц, и длина оси стандартной римской колесницы равнялась… правильно, 4 футам 8.5 дюймам! Ну вот теперь мы докопались, откуда взялся этот размер, но все же почему римлянам вздумалось делать свои колесницы с осями именно такой длины? А вот почему: в такую колесницу запрягали обычно двух лошадей. А 4 фута 8.5 дюйма — это был как раз размер двух лошадиных задниц! Делать ось колесницы длиннее было неудобно, так как это нарушало бы равновесие колесницы. Следовательно, вот и ответ на самый первый вопрос: даже теперь, когда человек вышел в космос, его наивысшие технические достижения напрямую зависят от РАЗМЕРА ЛОШАДИНОЙ ЗАДНИЦЫ.
Это работало бы лишь для плоской земли, а она сильно не ровная. Тут скорее дело в том, что 60 удобно делить на двоих, троих, четверых, пятерых и шестерых.
James Densmore had suggested splitting up commonly used letter combinations in order to solve a jamming problem caused by the slow method of recovering from a keystroke: weights, not springs, returned all parts to the «rest» position. This concept was later refined by Sholes and the resulting QWERTY layout is still used today
Сочетания букв E+R, E+S, E+D, A+S, и в том и в другом порядке, — среди самых частых в английском; тем не менее им соответствуют рядом стоящие клавиши.
Имею ввиду не раскладку, а смещение рядов клавиш, полностью соответствующее механической пишмашинке, где клавиши расположены на продольных рычагах, жёстко задающих взаиморасположение рядов.
Вся эта хрень напоминает старую байку про ракеты и лошадиные задницы. Но если там довольно притянтая за уши история, то тут прямо видно эволюцию легаси.
Блин… меня опередили=) За что люблю мой хабр, так это за то, что дофига людей тут думает так же как я, но все равно есть что почерпнуть. От такого мылительного эха порой даже неловко.
Some strings in DEC's 16-bit systems were encoded as 8-bit bytes, while others used RADIX 50 (then also called MOD40).
Видимо, RADIX-50 использовалась ограниченно и только для строк. К тому же, возникает проблема отсутствия некоторых символов, особенно '?', присутствующего в en.wikipedia.org/wiki/ISO/IEC_646. Особенно забавно, что IBM со своими кодировками успешно опротестовала исключение триграфов из C++11.
P.S. выше я имел в виду эту задачу: www.hackerrank.com/challenges/caesar-cipher-1/problem. С учётом, что IBM всё ещё держится за наследие, уточнить кодировку на собеседовании таки становится очень важно.
Рудиментом такого положения дел являлся строковый тип ALFA в оригинальном виртовском компиляторе Паскаля (появившемся ещё до Си), который номинально определён как упакованный массив символов фиксированной длины.
Короче, в своё время побоялись сделать рефакторинг. Так что до сих пор расхлёбываем.
Как раз на днях разбирался почему Ж сопоставили V в кодировках и раскопал приказ 28940 от 1855 года Николая I, по которому телеграфисты сначала сделали свою азбуку Морзе, в которой не было соответствия с латинскими буквами.
Но она не зашла, так как уже привыкли транслитом слать депеши и в 1856 Александр II утвердил уже существующее положение дел.
Эта таблица и попала дальше в КОИ и в EBCDIC.
В то давнее время даже ещё не было часовых поясов и время по телеграфным станциям отличалось на конкретные секунды, а не на ровное количество часов.
Вот такую первую сетку Сименес протянул по просторам России. Сисадмин :)
А все эти приказы похожи прям на древние RFC, интересно почитать.
Как раз на днях разбирался почему Ж сопоставили V в кодировках и раскопал приказ 28940 от 1855 года Николая I, по которому телеграфисты сначала сделали свою азбуку Морзе, в которой не было соответствия с латинскими буквами.
Но она не зашла, так как уже привыкли транслитом слать депеши и в 1856 Александр II утвердил уже существующее положение дел.
Эта таблица и попала дальше в КОИ и в EBCDIC.
Это очень интересно (в частности то, что латинским алфавитом тогда считался немецкий), но так и не объясняет V=Ж в КОИ
Например могу предположить, что это произошло не без влияния буквы Ѵ Ижица, но это уже никто не раскопает, так как скорее всего это сложилось спонтанно при первых опытах передачи кириллических сообщений через телеграф и задокументировалось, только уже по факту в приказе.
TL;DR потому что BCD означает двоично-десятичный, и текущая версия ведет род от кодировки в перфокартах. Но вот детали, как именно это всё было, радуют, и это хорошо.
Это представление, когда каждой десятичной цифре отведены фиксированные биты, например число 1234 может храниться как
0x1234
.BCDIC создавалась так, чтобы двоично-десятичное представление числа совпадало с его строковой записью — для этого ноль и «поставили на место». Но BCD не имеет отношения к кодировке букв, и их оставили «как есть».
EBCDIC уже не имеет к BCD никакого отношения, кроме исторической связи.
Почему в EBCDIC буквы идут не подряд?