1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

[Графомания] Кодировка с того света

Автор: Zelya · 10 фев 2017 · ·
  1. Удобно, знаете ли, открыть файлик, набранный на древнем-древнем компьютере и без танцев с бубном прочитать его содержимое. Я говорю не про Windows 98 и даже не про DOS, а про что-то еще более древнее и не совместимое с IBM PC. А ведь мы даже не задумываемся, что в реальности это чудо чудесное. И вот, прочитав один такой документик, я и решил написать сей небольшой опус.
    Помните историю в одной из предыдущих графоманий тыц1 тыц2 о злоключениях некоего профессора? Как и положено, история имеет счастливый конец, где на помощь ученому приходят мини-компьюетры и CP/M. Мною не были упомяты пять важных букв: ASCII. Да, эта древняя кодировка (еще из 60-х) тесно переплетается с CP/M, но в то же время абсолютно независима. Изначально она имела лишь 7-битное представление: латынские буквы, цифры, пунктуация, управляющие символы. Управляющие символы, что за ересь? Да-да, символы для управления кареткой принтера. Например, символ 0x08, аналог Backspace. Хотите набрать на принтере "ê": пишите коды: 0x65, 0x08, 0x5E. 0x65 - это обычная латынская "e", которая вылезет на принтере, при этом каретка передвинется на одну позицию вправо. 0x08 вернет ее назад, на уже напечатанную "e". А 0x5E - это "^" - шапочка, или по-научному, циркумфлекс, прости Господи, который напечатается поверх "e" и получится "ê". А кто сказал, что в 60-х был подход WYSIWYG (What You See Is What You Get)?
    Но что-то я отвлекся. Вобщем, кодировка была хороша, а немного позже стала еще лучше. 8-й бит, служивший для технической информации (в основном, сигналы ошибок) скоро перестал использоваться по историческому назначению, и кодировку расширили до 256-ти символов. Теперь в легкочитаемом формате (почти WYSIWYG) вы могли видеть и шапочки над буквами, и всякие умлауты, и математическую хрень (да кому нужен символ под одну четвертую?!), но главное - песвдографику! Набор черточек и блочков позволявший круто оформить текст в таблицу или даже нарисовать картинку. Но все равно, считалось, что первые 128 символов - стандарт, а следующие - это опциональное расширение, например для локализаций.
    Локализация... Как много в этом слове для сердца русского слилось. Но началось все не с "Фаргуса", и даже не с Taralej & JaboCrack. Берите выше - АН СССР. DOS в 80-х годах, хоть и был нам не положен (гуглите CoCom), но все же покорил советские просторы. Нужно было его обязательно русЕфицировать, для чего отводились расширенные 128 символов. В АН подошли к процессу творчески, и создали аж две русификации: основную и альтернативную кодировки (а еще была одна забытая от МС: CP855). Вобще, я просто-таки требую прочтения этой незабвенной статьи, пока сайт еще не грохнули: 15 years of Russian MS-DOS 4.01. Но вернемся к нашей истории. Чем же отличались основная и альтернативная кодировка. В основной, все кириличные буквы шли в ряд, согласно алфавиту. Просто идиллия для программитса: и перебрать все в одном цикле легко, и определить символ-букву за одно сравнение, и т.д. Но одна мелочь мозолила глаза: символы псевдографики пришлось подвинуть. Стало быть, все таблицы из зарубежных документов "поедут". Ну и шут с ними, с таблицами, но все же, если очень приспичит, то можно загрузить альтернативную кодировку, где псведографика - на месте, но между "п" и "р" есть разрыв. Так думали в АН, но реальность оказалась обратной. Не, ну дейстивтельно, вы хотели бы работать в любимом Нортоне как-то так:
    Untitled.png
    (В реальности - это Волков под КОИ8, но повертье, Нортон под "основной" будет еще более удручающим)
    То-то же. Когда МС решили официально русифицировать DOS 4.01, был проведен опрос с интересными результатами: альтернативной кодировкой пользовались 85%, основной - 7%. Как-то неправильно кодировки названы, не? Вобщем, альтернативная кодировка, за особенные успехи в поддержании совместимости, была удостоена своей кодовой страницы от МС: CP866, и кучи наследников для других языков ex-USSR.
    Но в двери уже стукал 90-й год, с Windows 3.0 и необходимостью как-то улучшить процесс локализации. 256 символов, конечно, хорошо, но мало. Пойдем самым простым путем, добавим еще один байт, и получим 65 тыс символов, вот раздолье-то. И обзавем это все Unicode. Сказано - сделано. Но вот беда, разработчики из консорциума прошлись по тем же граблям, что и их коллеги из АН СССР. А ведь еще Маяковский говорил: "на совместимость шуток не скаль", ну или я что-то перепутал, не важно. Вобщем, такой милый сердцу документик из 80-х больше не читался в обычном Unicode-редакторе. Да и Unicode документик тоже не особо читался по нажатию F3 в Нортоне. Пришлось лепить костыль. Предыдущую версию обозвали UTF-16, а в альтернативу ему создали UTF-8. Всем хорош для программиста был UTF-16: строго два байта на символ (это уже потом его "доработали"). Легко и текст выводить, и позицию символа опередлить, и код символа по позиции: не жизнь, а малина. А тут родилась, эта "отрыжка", UTF-8, которая кодирует то одним байтом, то двумя, то тремя, а то и четырмя (а теперь уже и шестью). Вот попробуй найти в потоке байтов нужное место, чтобы поредактировать, скажем 100-й символ! пока первые 100 не распознаешь - хрен найдешь! Ужас ужасный. Одно лишь преимущество: 128 первых символов из древнего ASCII совпадают. А теперь внимание, вопрос! Как Вы думаете сколько процентов пользователей используют UTF-8 и сколько UTF-16 и его идейное продолжение, UTF-32? Вот то-то. И как бы не плакались ленивые программисты, мол из-за теневого правительства Земли выживают только самые неудобные решения, но пользователя не обманешь. Пользователь, он сердцем видит. Хотя, иногда даже не понимает, насколько ему повезло.
    Вот и я сижу сейчас за документиком, которому уже далеко за 30 лет, и читаю его в Notepad-е. Разве не чудо?

    UPDATE

    Еще одна довольно веселая история случилась в СССР, еще до массового распространения DOS и 8-мибитного ASCII. Вопрос стоял о руссификации 7-мибитной кодировки, что было гараздо труднее. Тут уже приходлось жертвовать не только порядком букв, и даже не псевдографикой, а латиницей. Чтобы хоть как-то сохранить читаемость зарубежных текстов, было придумано остроумное решение: ставить символы не в порядке русского алфавита, а подбирая букву-аналог латинской. Почти что транслитерация. Получилось настолько мило, что даже Лурк не обошел эту тему стороной: Инжалид дежице. Ну, зато "error", читался как "еррор"; "disk", как "диск", классно ж!
    Dimouse, SAS и warr11r нравится это.

Комментарии

  1. Steel Rat
    В UTF8 есть завершающий 0. Это сильно влияет на совместимость. Не из-за желания испортить жизнь его придумали. Так что, UTF8 - годный формат.
  2. Zelya
    @Steel Rat, так и я про то же. UTF8 - годный. А при чем здесь завершающий 0?
  3. Steel Rat
    Мне сначала показалось, что ты не доволен алгоритмом кодирования UTF8.

    Куча кода работает со строками, которые завершаются нулём. Соответственно, если ты начнёшь этот код кормить int16 и int32, то строка закончится толком не начавшись.
  4. Zelya
    @Steel Rat,
    Ну, как программисту, он многократно сложнее изначального UTF16 и нынешнего UTF32. Но как пользователю, он самое то. Поэтому я доволен :).

    int16 и int32 - это UTF16 и UTF32, да? Если да, то я про это э и писал. UTF8, хоть и неудобный для программиста, но отлично отрабатывает со старыми форматами (ASCII), с тем же 0-м символом, где он полностью совпадает с нулевым байтом. Мы просто привыкли еще со времен 80-х, что char = byte :).
    Если изначально софт писать под UTF32, то проблем никаких. читаешь себе Int32 до того же нулевого значения.
  5. hobot
    ИМХО: к куску текста про принтер с рулоном и управляющие символы,
    было бы не худо и фото рабочего места показать (благо в сети навалом,
    в том числе и с юмором).
  6. hobot
    Уточни : char = byte (?)
    ____________________

    на уровне переменных это разные типы данных же, разве нет?
    Или ты про то сколько памяти символ в строке занимает?
  7. hobot
  8. hobot
    CP/M (???) - вот почему наш народ всякое Г. так любит?
  9. DJKrolik
    Меня сейчас беспокоит только 1 вопрос: почему никто не использует UTF8-эмоджи-символы при разработке сайтов, ведь они практически везде прочитаются. Никакой годной статьи на эту тему я не нашел. В данный момент все херачат какие-то js-варианты, которые какбе подставляют картинку.
  10. hobot
    @DJKrolik, скорее всего - причина в том, что в настройках сервера надо тогда глобальную настройку на UTF8 - для корректной работы всех без
    исключения браузеров переключать, я могу ошибаться, но если это так,
    то скорее всего - это сомнительный плюс ради набора "эмоций", которые
    легко изобразить любым другим способом )

    [​IMG]
Чтобы оставить комментарий просто зарегистрируйтесь и станьте участником!
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление