Этот восхитительный Юникод

Original author: Wisdom
  • Translation


Перед вами обновляемый список самых замечательных «вкусностей» Юникода, а также пакетов и ресурсов

Юникод — это потрясающе! До его появления международная коммуникация была изнурительной: каждый определял свой отдельный расширенный набор символов в верхней половине ASCII (так называемые кодовые страницы). Это порождало конфликты. Просто подумайте, что немцам приходилось договариваться с корейцами, где чья кодовая страница. К счастью, появился Юникод и ввёл общий стандарт. Юникод 8.0 охватывает более 120 000 символов из более 129 письменностей. И современные, и древние, и до сих пор не расшифрованные. Юникод поддерживает текст слева направо и справа налево, наложение символов и включает самые разные культурные, политические, религиозные символы и эмодзи. Юникод потрясающе человечен, а его возможности сильно недооцениваются.

Содержание



Краткое введение


Какие символы входят в Стандарт Юникод?


Стандарт Юникод определяет коды для символов основных современных языков. Это европейские алфавитные письменности, ближневосточные письменности справа налево и многие письменности Азии.

Стандарт также содержит знаки пунктуации, диакритические знаки, математические символы, технические символы, стрелки, дингбаты, эмодзи и т. д. Он предоставляет коды для диакритических знаков, изменяющих знаки символов, такие как тильда (~). Они используются в сочетании с основными для представления акцентированных символов (например, ñ). В целом, Юникод версии 9.0 предоставляет коды для 128 172 символов из мировых алфавитов, наборов идеограмм и коллекций символов.

Большинство символов общего пользования помещаются в первые 64K кодовых точек, область кодового пространства, которая называется основной многоязычной плоскостью, или BMP для краткости. Есть ещё шестнадцать других дополнительных плоскостей, доступных для кодирования других символов, с более чем 850 000 неиспользуемых кодовых точек. Они могут пригодиться для добавления новых символов в будущие версии стандарта.

Стандарт Юникод также резервирует кодовые точки для частного использования. Вендоры или конечные пользователи могут назначать их в своих собственных системах для своих символов или использовать со специализированными шрифтами. На BMP находится 6400 кодовых точек для частного использования и ещё 131 068 дополнительных кодовых точек частного использования, если 6400 недостаточно для конкретных приложений.

Кодировки символов Юникода


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

Стандарт Юникод определяет три формы кодирования, которые позволяют передавать одни и те же данные: это байт, слово и двойное слово (то есть 8, 16 или 32 бит на единицу кода). Все три формы кодируют один и тот же общий набор символов и могут быть эффективно преобразованы друг в друга без потери данных. Консорциум Юникод полностью одобряет использование любой из этих форм кодирования в качестве согласованного способа реализации Стандарта Юникод.

UTF-8 популярен для HTML и подобных протоколов. UTF-8 — это способ преобразования всех символов Юникода в кодировку переменной байтовой длины. Его преимущество в том, что символы Юникода, соответствующие знакомому набору ASCII, имеют те же байтовые значения, что и ASCII, а символы Юникода, преобразованные в UTF-8, могут использоваться с большим количеством существующего программного обеспечения без серьёзной доработки ПО.

UTF-16 популярен во многих средах, где необходимо сбалансировать эффективный доступ к символам с экономичным хранением. Он достаточно компактен, и все часто используемые символы помещаются в один 16-битный кодовый блок, в то время как все остальные символы доступны через пары 16-битных кодовых блоков.

UTF-32 полезен там, где объём памяти не вызывает беспокойства, но требуется доступ к символам по единому коду фиксированной ширины. Здесь каждый символ Юникода кодируется в одном 32-разрядном кодовом блоке.

Все три формы кодирования требуют для каждого символа не более 4 байт (или 32 бит).

Поговорим о цифрах


Набор символов Юникода разделён на 17 основных сегментов (плоскостей), которые далее делятся на блоки. В каждой плоскости есть место для 65 536 (216) кодовых точек, что создаёт в сумме 1 114 112 кодовых точек. Есть две «плоскости частного использования» (№ 16 и № 17), которые выделяются для использования на усмотрение компаний/пользователей. В них 131 072 кодовые точки.

Название Диапазон
1. Основная многоязычная плоскость (от U+0000 до U+FFFF)
2. Дополнительная многоязычная плоскость (от U+10000 до U+1FFFF)
3. Дополнительная идеографическая плоскость (от U+20000 до U+2FFFF)
4. Третичная идеографическая плоскость (от U+30000 до U+3FFFF)
5. Плоскость 5 (не используется) (от U+40000 до U+4FFFF)
6. Плоскость 6 (не используется) (от U+50000 до U+5FFFF)
7. Плоскость 7 (не используется) (от U+60000 до U+6FFFF)
8. Плоскость 8 (не используется) (от U+70000 до U+7FFFF)
9. Плоскость 9 (не используется) (от U+80000 до U+8FFFF)
10. Плоскость 10 (не используется) (от U+90000 до U+9FFFF)
11. Плоскость 11 (не используется) (от U+A0000 до U+AFFFF)
12. Плоскость 12 (не используется) (от U+B0000 до U+BFFFF)
13. Плоскость 13 (не используется) (от U+C0000 до U+CFFFF)
14. Плоскость 14 (не используется) (от U+D0000 до U+DFFFF)
15. Специализированная дополнительная плоскость (от U+E0000 до U+EFFFF)
16. Дополнительная область для частного использования — A (от U+F0000 до U+FFFFF)
17. Дополнительная область для частного использования — B (от U+100000 до U+10FFFF)

Первая плоскость называется основной многоязычной плоскостью или BMP. Она содержит кодовые точки от U+0000 до U+FFFF, то есть наиболее часто используемые символы. Остальные шестнадцать плоскостей (U+010000 → U+10FFFF) называются дополнительными или астральными.

Суррогатные пары UTF-16


Символы вне основной плоскости, как тетраграмматон, означающий центр (U+1D306), можно закодировать в UTF-16 только двумя 16-битными кодовыми единицами: 0xD834 0xDF06. Это называется суррогатной парой. Обратите внимание, что суррогатная пара представляет только один символ.

Первая кодовая единица суррогатной пары всегда находится в диапазоне от 0xD800 до 0xDBFF и называется верхней частью пары.

Вторая кодовая единица суррогатной пары всегда находится в диапазоне от 0xDC00 до 0xDFFF и называется нижней частью пары.

Матиас Байненс

Суррогатная пара: представление одного абстрактного символа, состоящего из последовательности двух 16-разрядных кодовых единиц, где первое значение пары является верхней суррогатной кодовой единицей, а второе — нижней суррогатной кодовой единицей. Суррогатные пары используются только в UTF-16.

Unicode 8.0 Глава 3.8 − Суррогаты

Вычисление суррогатных пар


Юникодовский символ «Куча дерьма» (U+1F4A9) в UTF-16 придётся кодировать как суррогатную пару, т. е. два суррогата. Чтобы преобразовать любую кодовую точку в суррогатную пару, используйте такой алгоритм (на JavaScript). Имейте в виду, что мы используем шестнадцатеричную нотацию.

 var High_Surrogate = function(Code_Point){ return Math.floor((Code_Point - 0x10000) / 0x400) + 0xD800 };
 var Low_Surrogate  = function(Code_Point){ return (Code_Point - 0x10000) % 0x400 + 0xDC00 };

 // Reverses The Conversion
 var Code_Point = function(High_Surrogate, Low_Surrogate){
	return (High_Surrogate - 0xD800) * 0x400 + Low_Surrogate - 0xDC00 + 0x10000;
 };



Композиция и декомпозиция


Юникод включает в себя механизм для изменения формы символа, который значительно расширяет поддерживаемый набор глифов. Это касается комбинируемых диакритических знаков. Они вставляются после главного знака. На один и тот же знак можно наложить несколько комбинируемых диакритических знаков. Юникод также содержит предварительно составленные версии большинства таких комбинаций для нормального использования.

Некоторые последовательности символов также можно представить в виде одного символа, который называется предварительно составленным символом (precomposed character), он же составной символ (composite character). Например, символ [ü] можно закодировать как единственную кодовую точку U+00FC или как базовый символ U+0075 (u), за которым следует несамостоятельный знак U+0308 (¨). Стандарт Юникод кодирует составные символы для совместимости с установленными стандартами, такими как Latin 1, который включает в себя множество составных символов, таких как [ü] и [ñ].

Составные символы можно разложить для согласованности или анализа. Например, при сортировке имён по алфавиту символ [ü] можно разложить на [u], за которым следует несамостоятельный знак [¨]. После такой декомпозиции алгоритму проще работать с последовательностью символов. Это позволяет упростить сортировку в языках, где модификаторы символов не влияют на алфавитный порядок. Стандарт Юникод устанавливает порядок декомпозиции для всех составных символов. Он также определяет формы нормализации для обеспечения уникальных представлений символов.

Мифы о Юникоде


Из слайдов презентации Марка Дэвиса «Мифы Юникода».

  • Юникод — это просто 16-битный код. — Некоторые ошибочно полагают, что Юникод — это просто 16-битный код, в котором каждый символ занимает 16 бит, и поэтому существует 65 536 возможных символов. На самом деле это не совсем так. Это самый распространённый миф о Юникоде, так что если вы тоже так думали раньше, не расстраивайтесь.
  • Можно взять для своих нужд любую кодовую точку, которая не используется. — Нет. Когда-нибудь это место займёт другой символ. Вместо этого используйте плоскости для частного использования или области без символов в каждой плоскости, где по стандарту не будет никаких символов.
  • Каждая кодовая точка Юникода представляет символ. — Нет. Есть много точек без символов (FFFE, FFFF, 1FFFE и др.) Кроме того, суррогатные кодовые точки, приватные и неиспользуемые кодовые точки, а также управляющие/форматирующие «символы» (RLM, ZWNJ и др.)
  • В Юникоде заканчивается место. — Если бы оно заполнялось линейно, то закончилось бы в 2140 году. Но место не заполняется линейно. Планы на будущее см. здесь.
  • Все знаки сопоставляются один к одному. — Нет. Возможны варианты:
    • Один ко многим: (β → SS)
    • С учётом контекста: (…Σ ←→ …ς и в то же время …ΣΤ… ←→ …στ…)
    • С учётом локали: (I ←→ ı и в то же время İ ←→ i)

Прикладные кодировки Юникода


Тип кодирования Пример
Объект HTML (десятичный)
Объект HTML (hex)
Управляющий код URL %F0%9F%96%96
UTF-8 (hex) 0xF0 0x9F 0x96 0x96 (f09f9696)
UTF-8 (бинарный) 11110000:10011111:10010110:10010110
UTF-16/UTF-16BE (hex) 0xD83D 0xDD96 (d83ddd96)
UTF-16LE (hex) 0x3DD8 0x96DD (3dd896dd)
UTF-32/UTF-32BE (hex) 0x0001F596 (0001f596)
UTF-32LE (hex) 0x96F50100 (96f50100)
Восьмеричная управляющая последовательность \360\237\226\226

Исходный код


Тип кодирования Пример
JavaScript \u1F596
JSON \u1F596
C \u1F596
C++ \u1F596
Java \u1F596
Python \u1F596
Perl \x{1F596}
Ruby \u{1F596}
CSS \01F596

Список удивительных символов



Совместный доступ к документу может быстро превратить редактирование в письменную рэп-битву, ведущуюся все более запутанной расстановкой управляющих от U+202a до U+202e

Специальные символы


Консорциум Unicode опубликовал диаграмму общей пунктуации, где можете найти более подробную информацию.

Символ Название Описание
'' U+FEFF Неразрывный пробел нулевой ширины (Byte Order Mark — BOM) Обладает важным свойством однозначности при изменении порядка байтов. У него также нулевая ширина и невидимость. В неподходщем программном обеспечении (например, интерпретаторе PHP) это приводит к всевозможным примерам забавного поведения.
'￯' '\uFFEF' Обратный BOM Не приравнивается к символу, кроме начала текста.
'​' '\u200B' Неразрывное пространство нулевой ширины Символ без внешнего вида и без эффекта, кроме предотвращения образования лигатур.
' ' U+00A0 Неразрывный пробел Заставляет соседние символы держаться вместе. Хорошо известен как   в HTML.
'­' U+00AD Мягкий дефис В HTML работает как пространство нулевой ширины, но при встрече с концом строки (и только в этом случае) показывает дефис.
'‍' U+200D Знак нулевой ширины (с объединением) Заставляет соединяться соседние символы (например, арабские символы или поддерживаемые эмодзи). Можно использовать для последовательно скомбинированных эмодзи.
'⁠' U+2060 Соединитель слов То же самое, что и U+00A0, но совершенно невидимый. Хорошо подходит для @font-face в Twitter.
' ' U+1680 Огам знак пробела Отмечает пробел, который выглядит как тире. Отлично подходит, чтобы приблизить программистов к безумию: 1 + 2 === 3.
';' U+037E Греческий знак вопроса Похож на точку с запятой. Также забавный способ троллить разработчиков.
'‭' U+202D Изменяет направление текста слева-направо.
'‮'‭ ‭ U+202E Изменяет направление текста справа-налево.
'ꓸ' U+A4F8 Лису буква tone mya ti Двойник для точки.
'ꓹ' U+A4F9 Лису буква tone na po Двойник для запятой.
'ꓼ' U+A4FC Лису буква tone mya na Двойник для точки с запятой.
'ꓽ' U+A4FD Лису буква tone mya jeu Двойник для двоеточия.
'︀' Вариантные селекторы (от U+FE00 до U+FE0F и от U+E0100 до U+E01EF) Блок из 256 символов нулевой ширины, которые обладают свойством ID_Continue, то есть могут использоваться в именах переменных (не первая буква). Что делает их особенными, так это то, что над ними проходит курсор мыши, поскольку они объединяют символы, в отличие от большинства других символов нулевой ширины.
'ᅟ' U+115F Заполнитель хангыль чхосон По сути, заполняет пространство. Визуализируется как символ нулевой ширины (невидимый), если явно не поддерживается при визуализации. Обозначен как ID_Start
'ᅠ' U+1160 Заполнитель чунсон Возможно, заполняет пространство? Визуализируется как символ нулевой ширины (невидимый), если явно не поддерживается при визуализации. Обозначен как ID_Start
'ㅤ' U+3164 Заполнитель хангыль В целом, заполняет пространство. Визуализируется как символ нулевой ширины (невидимый), если явно не поддерживается при визуализации. Обозначен как ID_Start

Подожди… что я только что прочитал?

Идентификаторы переменных могут включать пробелы!


U+3164 Заполнитель хангыль отображается в виде широкого пробела. Если символ явно не поддерживается в рендеринге, то отображается как полностью невидимый (и не занимает место, т. е. «нулевой ширины»). Это означает, что вы никогда не увидите уродливый символ замены символов (�).

Я пока не уверен, почему U+3164 указано вести себя таким образом. Интересно, что U+3164 был добавлен в Юникод в версии 1.1 (1993) — так что у специалистов Консорциума было много времени, чтобы его продумать. Во всяком случае, вот несколько примеров.

> var ᅟ = 'foo';
undefined
> ᅟ
'foo'


> var ㅤ= alert;
undefined
> var foo = 'bar'
undefined
> if ( foo ===ㅤ`baz` ){} 	// alert
undefined


> var varㅤfooㅤ\u{A60C}ㅤπ = 'bar';
undefined
> varㅤfooㅤꘌㅤπ
'bar'

**Примечание:** я тестировал рендеринг U+3164 на Ubuntu и OS X со следующими параметрами: `node`, `php`, `ruby`, `python3.5`, `scala`, `vim`, `cat`, `chrome`+`github gist'. Atom — единственная система, которая терпит неудачу, (некорректно) отображая пустые поля. Мне ещё предстоит проверить код в Emacs и Sublime. Насколько я понимаю, Консорциум Юникод не будет переназначать или переименовывать символы или кодовые точки, но его можно убедить изменить свойства символов, таких как ID_Start и ID_Continue.

Модификаторы


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

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

> 'a'
 "a"

> 'a\u{0308}'
 "ä"

> 'a\u{20DE}\u{0308}'
 "a⃞̈"

> 'a\u{20DE}\u{0308}\u{20DD}'
 "a⃞̈⃝"

// Modifying Invisible Characters
> '\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}'
 "‎‎‎‎‎‎‎‎‎‎"

> '\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}'.length
 10

Коллизии преобразований в верхнем регистре


Символ Кодовая точка Результат
ß 0x00DF SS
ı 0x0131 I
ſ 0x017F S
0xFB00 FF
0xFB01 FI
0xFB02 FL
0xFB03 FFI
0xFB04 FFL
0xFB05 ST
0xFB06 ST

Коллизии преобразований в нижнем регистре


Символ Кодовая точка Результат
0x212A k

Причуды и устранение неполадок


AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 53

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

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

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

          +1

          Почему не добавить? Я уже лет восемь вот такой раскладкой пользуюсь.


          Для Win и Мака есть раскладка Бирмана.


          Свою сделать — тоже не титаническая работа.

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

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

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


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


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

                0

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

                  0

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

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

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

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

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


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

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

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


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

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

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

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

                        0

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

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

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


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

                      0
                      Кстати интересно, действительно ли в современных консолях используются все управляющие символы, или только из переносимого набора POSIX?
                        0

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

                          0

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

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

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

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

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

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

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

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

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


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

                          А вот это image


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

                            0

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


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

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

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

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

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

                                    0
                                    Потом можно будет сделать мигание, полупрозрачность.
                                      0
                                      Дальше — декораторы, типа bold, italic, underline, overline, upper и lower index и т.д.

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

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

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


                                        UPD. Там был


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

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

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


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

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

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

                                        0

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

                                          0
                                          Использовать Windows XP, ну или хотя бы шрифты из неё.
                                          +2
                                          Большего сумбура в описании Юникода я в жизни не встречал! Понять написанное здесь может только тот, кто знает как устроен Юникод, а тому кто знает как устроен Юникод — нахрен не сдалась эта статья, уж простите…
                                            +2
                                            Ждём новой около-программистской специализации: юникодер.
                                              0
                                              Мне тут недавно строчку интересную подгоняли, вот тут gist.githubusercontent.com/dur-randir/de6860347d27f1b0cb7b2d7bd66d9d12/raw/83407b0273cbc3d6c41c70c61effac1ad34bd90d/unicode.txt В общем скопировать её на хабр не получилось. Точнее опубликовать не получилось
                                              +1
                                              Вообще, IMHO, слишком много всего повтыкали в Юникод!
                                              Ну, символов бы, но зачем эмодзи, смайлики, цвета кожи и прочую голубятню?
                                              Он «пухнет» не по дням, а по часам!
                                              Скоро туда ещё что-нибудь воткнут, вот, есть ли там 53 (или уже больше) гендера?
                                                0
                                                Идеи подкидываешь? Страшна, удоли!

                                              Only users with full accounts can post comments. Log in, please.