Pull to refresh

Comments 56

Мда… бедные, бедные разработчики…
С Юникодом конечно наворотили… Хочется спросить — когда же наконец он станет Тьюринг-полным, чтобы на нем можно было писать эксплойты и уводить пароли? Или может уже стал?

Еще очень жаль, что по чисто историческим причинам символы с кодами 0x00..0x1F оказались частично не задействованы (фактически сейчас там используются только переносы строк, табуляция и нулевой код, и целых 24 кода фактически свободны). В то же время в основной интернациональной части Юникода («ASCII символов», т.е. среди тех символов, которые гарантированно есть на любой клавиатуре мира) объективно не хватает некоторых фундаментальных символов. Например стрелок и некоторой базовой математики. Хотя они есть в Юникоде, но идея в том, что «общемировые символы» — латинские буквы, цифры и базовые знаки препинания — наследие ASCII, однобайтовые коды в UTF-8 и они есть на всех клавиатурах.

Особенно хочется для языков программирования.
Но увы, теперь туда уже ничего не добавить…

Это понятно, что лично для себя всё можно сделать.
Я имею в виду общемировое распространение. Если бы исторически в ASCII было на 24 символа больше, то на клавиатурах всего мира вероятно был бы еще один «shift» или какой-то иной способ для переключения на дополнительную функцию каждой буквенно-цифровой клавиши, на каждой клавише был бы нанесен дополнительный символ (например стрелки ↑ → ↓ ←, фигуры ◊ □ △ ▽ ◁ ▷, математические символы ± ≈ ≠ × ÷ ∃ ∀ ⌀ ∞, дополнительные скобки и кавычки). Это было бы уже частью культуры. Языки программирования выглядели бы иначе. Например в С++ не пришлось бы использовать знаки «больше» и «меньше» для шаблонов, просто взяли бы еще одни скобки, в результате парсеры были бы проще и код нагляднее.

Юникод огромен и в нем есть практически любые символы, но в этом и проблема. А самое начало кодовой таблицы, унаследованное от ASCII, является как-бы обязательным по умолчанию набором для клавиатур всего мира:)

В DOS, кстати, эти символы вполне себе были:
https://en.wikipedia.org/wiki/Code_page_437


Но вот с Linux так не получилось, потому что вывести изображение управляющего символа в терминал попросту невозможно из-за самой концепции терминала.


И в Linux, насколько я понимаю, ситуация такая же

В DOS при выводе управляющих символов во многих случаях тоже не символ отобразится, а выполнится действие (писк, смещение на позицию табулявции и т.д.).
А в линуксе при желании можно и картинку символа отобразить. Не помню точно, но, если не путаю, даже в некоторых терминалах была возможность "экранировать" управляющий символ, что приводило к отображению картинки символа.

В DOS управляющие символы не выводились в консоль, а рисовались на экране напрямую. В Linux же такой радости нет. Непечатные символы можно вывести, только заменив их на другие.

Всё верно, но в результате имеем что имеем. Когда делали 32 управляющих кода, казалось что 256 символов хватит всем:) А ошибка была в том, что с самого начала не разделили отображаемые символы и управляющие коды. Следовало бы бы ввести единственный escape-код, за которым следовал бы управляющий код из отдельной escape-таблицы, а остальные коды отдать только под символы.
И современный Юникод повторяет эту же ошибку, вводя коды цветов и наложение символов друг на друга. Это по сути escape-коды, а не символы! И они должны быть в отдельном стандарте. А Юникод должен быть только для символов, без цвета и без взаимосвязи.

И как же люди в 1960 году, разрабатывая кодировку для телетайпа, не смогли этого предусмотреть?

Наверное ошибка получилась где-то в цепочке перехода от аппаратного телетайпа к компьютерной кодировке ASCII. В какой-то момент следовало нарушить обратную совместимость, но этого не сделали, и в результате имеем такое.
Помню, как в прошлом веке мы развлекались на ассемблере, рисуя цветные картинки из символов на экране. Был у нас один художник, у которого такие картинки получались просто шедевральными, причем накидывал он такие программки довольно быстро. Плохо только, что принтеры у нас были тогда только черно-белыми матричными. Распечатанные картинки в то время было принято развешивать по стенам. На BBS, Usenet, FTP, а также в раннем Интернет такие картины были очень распространены. Большие архивы ASCII-картинок и сейчас можно найти на просторах Интернет.

Если в DOS в программе вывести символ с кодом 0x0d, то будет осуществлен перевод строки, а не изображение музыкальной ноты.
Чтобы вывести изображение, соответствующее этому коду, придется напрямую поместить символ в буфер экрана.


В линуксе, внезапно, все точно так же, только средства доступа к буферу экрана другие, и не все терминалы это поддерживают.
Но, тем не менее, вывести изображение ноты символом с кодом 0x0d в терминале линукса вполне возможно, особенно если это не графический терминал, запущенный в иксах, а текстовый режим.

Чтобы вывести изображение, соответствующее этому коду, придется напрямую поместить символ в буфер экрана.

Именно так. Но вообще, прямой вывод в буфер экрана, а не через int 21h был чуть ли не нормой.


Но, тем не менее, вывести изображение ноты символом с кодом 0x0d в терминале линукса вполне возможно, особенно если это не графический терминал, запущенный в иксах, а текстовый режим.

А как? Просто интересно.

Для DOS тоже была такая возможность — установить драйвер ANSI.SYS. И тогда можно было рисовать картинки любыми символами (в т.ч. непечатными) любого цвета в стиле ASCII-арт.

В Linux можно открыть на запись /dev/vcs и писать туда любые символы, включая управляющие - они не будут интерпретироваться драйвером терминала.

на клавиатурах всего мира вероятно был бы еще один «shift»

А он есть, правый альт (он же AltGr) называется.

Есть не везде.
До сих пор страдаю и тяну ради AltGr руки к встроенной клавиатуре. Лох, чо — надо было в Интернете заказывать, а не выбирать из полутора клавиатур, что были в магазине.

Еще очень жаль, что по чисто историческим причинам символы с кодами 0x00..0x1F оказались частично не задействованы (фактически сейчас там используются только переносы строк, табуляция и нулевой код, и целых 24 кода фактически свободны

Просто legacy, которое будет всё время теперь занимать место. Не забывайте, что при разработке Unicode и UTF-8 важным моментом была совместимость с однобайтными кодировками.


А насчёт не используются — ох как вы ошибаетесь. В тексте — ну да, не используются, но в консоли задействованы абсолютно все. А от консоли современные операционные системы и программы что-то не торопятся отказываться.

Да, используются: комбинации "Ctrl + что-то" преобразуются в коды 1-31 и отправляются в поток ввода. Например, можете в консоли нажать Ctrl + H — это все равно, что нажать Backspace.

Это другое — Emacs-подобное управление. С управляющими символами оно совпадает лишь частично.

в консоли задействованы абсолютно все
Ой ли? Вот где сейчас form feed и вертикальная табуляция используются, например?

Да, используются.
Form feed — очистка экрана в консоли.
Vertical tab — обычно дейтвие аналогично Line feed

Vertical tab — обычно дейтвие аналогично Line feed

Это где такое? o_O Первый раз слышу.

Это где такое? o_O Первый раз слышу.

#include <cstdio>

int main(int argc, char **argv)
{
    printf("Hello\vWorld\n");
    return 0;
}

 g++ %filename% && ./a.out

Действительно. Ляпота-то какая!


@bq:23:10:08:/tmp/dl$ echo -e 'Hello\vWorld'
Hello
     World

Вот только LF ведёт себя иначе и переводит курсор в начало строки, как CR — хоть теоретически и не должен иметь такого побочного эффекта, отчего в DOS сделали перенос строки комбинацией CR и LF.


@bq:23:14:06:/tmp/dl$ echo -e 'Hello\nWorld'
Hello
World
stty raw; echo -e 'Hello\nWorld'; stty -raw

Тьюринг-полным может ещё и не стал, но для написания эксплоитов уже давно пригоден
habr.com/ru/post/126198
Идея доп.шифтов не нова. На «спеки» было два шифта и, учитывая разные комбинации, одна клавиша отвечала за 6 символов-слов
спойлер
image

А вот это image


так и предполагается выглядеть?

Да. Это древний… хм… Скажем, "стилистический приём". Из той же категории, как "ПоМнИтЕ, КоГдА ТаКоЕ БыЛо ПоПуЛяРнО?" ну или "аццкий сотона пашёл в бабруйск", ну или "3T0 }|{E 1337".


Лет 15, наверное, назад было популярно вполне.

А как сделать чтобы оно так и выглядело? Что в Офисе, что в kwrite, что в консоли занимает одну строчку, а вся эта диактрика слипается.

А никак, если каждая строка рендерится как отдельный блок текста с чёткими границами.

Кроме того, эмодзи теперь поддерживают модификаторы цвета кожи.

Надо было сразу добавить три модификатора [R][G][B], чтобы в будущем не возникало недопониманий при общении с инопланетными рассами.
Заодно в соцсетях буковки во все цвета радуги красить можно было бы.
Разработчики бы были в ВОСТОРГЕ!
Это кстати да, если уж они превращают Юникод в метаязык рисования или форматирования текста.
Следующим расширением может стать задание угла поворота символа, процентов растяжения и сжатия по осям координат.
Дальше — декораторы, типа bold, italic, underline, overline, upper и lower index и т.д.
Исторически escape-последовательности были с самого начала, а что мешает расширить это понятие и ввести туда всякое типа «повторения символа N раз».
Это будет ад для разработчиков, и вот тогда они поймут, что стандарт нужно пересматривать и переделывать, делить логически на несколько уровней абстракции, и так появится Unicode 2!
UFO just landed and posted this here
Дальше — декораторы, типа bold, italic, underline, overline, upper и lower index и т.д.

Почему «дальше»? Они для латиницы давно есть уже.

.> рисования или форматирования текста

Да что там рисование и форматирование?

Пора уже и скрипты подключать. Пишем какой-нибудь код (код - не программа, а кодовый знак), обозначающий, что за ним начинается вставка скрипта (прямо текстом скрипта или урлом скрипта) или вставка другого объекта (тоже самим объектом или его адресом - ну подобно тегам html) и можно будет не то, что любые символы рисовать, но и вообще делать знаки шрифта интерактивными с выполнением кучи всяких действий. 😃

На хрена было в Юникод вообще пихать какие-либо эмодзи. *фейспалм*

Наверное, Вы хотели сказать "?


UPD. Там был


UPD2. Так, с помощью двух экспериментов (начинающихся как шутка), выяснилось, что хабр, предусмотрительно вырезает все последовательности UTF, начинающиеся с верхнего суррогата...

Ох уж этот Хабр
UPD: чёрт, у меня тоже эксперимент не получился :(
UPD2: а впрочем получился, на полной версии сайта под этим комментарием потерялась кнопка ответа, так-то)
UPD3: а теперь пропали все комментарии под моим, ха-ха, ответить получится только через мобильную версию

Куда пропали? Другие ветки я все вижу. А ответов на этот комментарий не вижу и в мобильной.


А вообще, Хабр работает на той же CMS, что и Табун, чего тут удивляться-то.

Просто админы Хабра уже отредактировали мой комментарий, чтобы всё починилось и вернулось)
Хабр работает на той же CMS, что и Табун

Вообще-то нет, это автор CMS в первых версиях просто срисовывал всё по максимуму с Хабра https://habr.com/ru/post/39482/

Вот бы доступный гайд по тому, как убрать эмодзи из шрифтов.

UFO just landed and posted this here
Большего сумбура в описании Юникода я в жизни не встречал! Понять написанное здесь может только тот, кто знает как устроен Юникод, а тому кто знает как устроен Юникод — нахрен не сдалась эта статья, уж простите…
Ждём новой около-программистской специализации: юникодер.
Вообще, IMHO, слишком много всего повтыкали в Юникод!
Ну, символов бы, но зачем эмодзи, смайлики, цвета кожи и прочую голубятню?
Он «пухнет» не по дням, а по часам!
Скоро туда ещё что-нибудь воткнут, вот, есть ли там 53 (или уже больше) гендера?
Идеи подкидываешь? Страшна, удоли!
Sign up to leave a comment.

Articles

Change theme settings