Символы-эмодзи: два режима отображения

Apr 18, 2022 04:16

Для символов-эмодзи в Юникоде предусмотрено два режима отображения: цветной и текстовый.

В текстовом режиме символы-эмодзи должны отображаться (в браузерах, текстовых редакторах, других программах) так же, как и символы-буквы. Когда пользователь каким-то образом указывает цвет текста в своей программе, то цвет символов-эмодзи в текстовом режиме совпадает с цветом символов-букв.

В цветном режиме символы-эмодзи раскрашены в некие рекомендованные цвета, и эти цвета не меняются, если пользователь как-то меняет цвет всего текста в программе.

В браузерах на движке «Chromium» («Google Chrome», «Microsoft Edge», «Яндекс.Браузер» и других), а также в текстовом редакторе «VS Code» (он тоже сделан на базе движка «Chromium») режимом по умолчанию для символов-эмодзи является цветной режим. Именно поэтому в предыдущем посте символы-эмодзи U+1F697 (automobile), U+1F699 (recreational vehicle), U+1F695 (taxi) отображались раскрашенными в разные цвета.

Для переключения отображения одного символа-эмодзи в текстовый режим можно добавить после этого символа-эмодзи специальный управляющий символ U+FE0E («Variation Selector-15» или по-русски «селектор начертания-15»).

Проверка на практике

Чтобы посмотреть, как это выглядит на практике, я взял тестовые файлы «test.js» и «test.html» из предыдущего поста и расширил их. После этого я скопировал файл «test.js» и поменял ему расширение на «.txt», в результате получил третий тестовый файл - «test.txt». Содержимое файлов «test.js» и «test.txt» одинаковое, но они по-разному отображаются в редакторе «VS Code».

Интересная нам строка в файле «test.html» теперь выглядит так:

const cars = ["🚗", "🚙", "🚕"];

const cars2 = ["🚗︎", "🚙︎", "🚕︎"];

Напомню, это только часть файла «test.html», которая нам сейчас интересна.

Содержимое файлов «test.js» и «test.txt» теперь выглядит так:

const cars = ["🚗", "🚙", "🚕"];
const cars2 = ["🚗︎", "🚙︎", "🚕︎"];

В добавленной второй строке символы-эмодзи должны отобразиться в текстовом режиме.

Вот как эти три тестовых файла отображаются в браузере «Microsoft Edge» и редакторе «VS Code», картинка-иллюстрация:



На вышеприведенной иллюстрации можно заметить, что при отображении в текстовом режиме символы-эмодзи в браузере и при отображении файла «test.txt» в редакторе «VS Code» отобразились тем же цветом, что и символы-буквы. При отображении в цветном режиме символы-эмодзи отобразились в рекомендованных цветах, которые не совпали с цветом символов-букв и других символов.

При отображении в текстовом режиме символы-эмодзи при отображении файла «test.js» в редакторе «VS Code» раскрасились в цвет строкового литерала (в данном случае - коричневый) для языка JavaScript, как и должно быть по логике подсветки синтаксиса. В цветном режиме символы-эмодзи остались в «своих» цветах, не отреагировав на раскраску синтаксиса языка JavaScript. Это еще одна причина, почему программисты в текстах своих программ обычно не используют символы-эмодзи.

Чтобы совсем всё стало понятно, можно взглянуть на двоичное представление файла «test.js» (у файла «test.txt» содержимое аналогичное), картинка-иллюстрация:



Напомню, файлы «test.js» и «test.txt» написаны в кодировке UTF-8.

На вышеприведенной иллюстрации красным маркером подчеркнуты байты символов-эмодзи U+1F697 (automobile), U+1F699 (recreational vehicle), U+1F695 (taxi). Каждый из них занимает по четыре байта:

«F0 9F 9A 97» (символ-эмодзи U+1F697),
«F0 9F 9A 99» (символ-эмодзи U+1F699),
«F0 9F 9A 95» (символ-эмодзи U+1F695).

Синим маркером подчеркнуты байты управляющего символа U+FE0E. Этот символ занимает три байта:

«EF B8 8E» (управляющий символ U+FE0E).

Сам управляющий символ в браузере или в редакторе не виден, но его действие (смена режима отображения символа-эмодзи на текстовый режим) видно. В редакторе «VS Code» этот управляющий символ можно вставить в нужное место в тексте из буфера обмена. В буфер обмена этот символ можно получить разными путями, например, с сайта с таблицей символов Юникода.

Инструмент, Образование, Программирование

Previous post Next post
Up