Таблица символов, или что скрывает обычный шрифт

05.04.23

Разработка - Инструментарий разработчика

Представляю инструмент для просмотра таблицы символов шрифта. Дополнительно в статье рассмотрены: стандарт Unicode, символы и пиктограммы некоторых блоков Unicode, комбинируемые диакритические знаки, суррогатные пары символов. Подробно описаны эмодзи - внешний вид, модификация и конструирование составных эмодзи.

Скачать исходный код

Наименование Файл Версия Размер
Таблица символов, или что скрывает обычный шрифт:
.erf 25,77Kb
9
.erf 25,77Kb 9 Скачать

Unicode

Говоря о таблице символов, нельзя обойти вниманием Unicode - стандарт кодирования символов. Стандарт позволяет кодировать примерно 1.1 миллион кодовых позиций, что хватает для символов большинства языков мира, пиктограмм, математических, научных, музыкальных символов и т.п. Обычно код Unicode записывается в шестнадцатеричном виде U+XXXX,  U+XXXXX или U+XXXXXX. Все кодовое пространство разделено на плоскости по 65536 кодов в каждой. На сегодняшний день используются или зарезервированы плоскости с номерами 0,1,2,3,14,15,16. В каждой плоскости выделены блоки для групп символов, например в плоскости 0: Основная латиница, Кириллица, Математические операторы. Как правило, шрифт, установленный в системе, содержит изображения символов из нескольких (но не всех!) блоков одной или нескольких плоскостей. Иногда система, не находя изображение символа с заданным кодом в заданном шрифте, может подобрать символ из другого шрифта. Поскольку в 1С, в основном, применяется UTF-16, то напрямую можно использовать только 65536 кодовых позиций из 0 плоскости. Кодовые позиции из других плоскостей, т.е.  U+1XXXX, U+2XXXX..., необходимо представить в виде двух последовательных кодов, суррогатной пары. Подробнее об этом описано в статье 1С и Unicode. Преобразование в суррогатную пару может выглядеть, например, так:

Результат.Вставить("Код1", Цел((Код - 65536) / 1024) + 55296);
Результат.Вставить("Код2", (Код - 65536)%1024 + 56320);		

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

 

Таблица символов

С теорией покончено, переходим к практике. Для просмотра символов шрифта был создан специальный инструмент, приложенный к публикации.

 

 

Основные функциональные возможности:

  • Отображение таблицы символов выбранного шрифта. Диапазон символов задается плоскостью и диапазоном кодов внутри плоскости. Диапазон кодов можно задавать вручную в десяти- и шестнадцатеричном виде, а также с помощью выбора предопределенного блока. Список предопределенных блоков содержит более 300 элементов.
  • Выделенный в таблице символ отображается справа в укрупненном виде, с указанием его кода. Кодом этого символа можно управлять (изменять) вручную для быстрого просмотра.
  • Под таблицей символов расположено поле ввода произвольной строки. Введенная строка символов дублируется в декорации-надписи и в ячейке табличного документа с применением выбранного шрифта. 
  • Строку символов можно "накликивать" по таблице, т.е. выбранный в таблице символ добавляется или вставляется в строку.
  • Строка символов разбирается на коды символов, которые помещаются в таблицу. Возможен обратный процесс - ввод кодов в таблицу и формирование строки символов.

Символы с кодами, большими 65535, преобразуются в суррогатные пары:

 

 

Здесь символ U+1F47B разбивается на два: D83D и DC7B. Обратите внимание: символ выглядит как один, но строка содержит два символа! Это приводит к проблеме подсчета количества символов, сравнения строк, получения подстрок, даже перевернуть строку становится очень сложной задачей.

Суррогатные пары - это не единственная особенность Unicode. Существуют специальные символы, которые могут влиять на поведение других символов - объединять или разделять символы, менять направление текста и т.д.

Так, например, символы U+202E и U+202D меняют направление текста в поле ввода:

 

 

В строке "0123456789" после "3" и после "7" поменялось направление и в поле ввода отображается "0123897654". На картинке я перемещаю курсор только с помощью стрелки "вправо" на клавиатуре, а курсор "прыгает" в разные части строки, конец строки для него - между видимыми цифрами  "9" и "7".

При написании данного инструмента я неожиданно столкнулся с одной неприятной проблемой. Все знают, что при клиент-серверном взаимодействии между клиентом и сервером передается сериализованный контекст формы. Так вот, при наличии в реквизитах формы некоторых символов Unicode появляется ошибка подобного вида:

 

 

Чтобы избежать появления подобных ошибок, недостаточно заменить контекстные вызовы на внеконтекстные, так как неявные серверные вызовы происходят, например, при установке шрифта или при завершении работы. Пришлось везде, где возможно обращение к серверу, очищать потенциально опасные реквизиты. 

 

Так что же содержится в шрифте?

Давайте теперь посмотрим, что можно получить, используя самый обычный шрифт 1С "Шрифт диалогов и меню".

Все нижеследующие эксперименты были проведены в тонком клиенте 8.3.22.1709, со стандартными шрифтами Windows 11 Домашняя (Версия 22H2)

Итак, начнем.

  • Блоки с латиницей нам не дают ничего интересного, разве что там можно увидеть сдвоенные буквы одним символом:

 

 

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

 

 

На экране вовсе не русская буква Й, а два символа: буква И и символ COMBINING BREVE. Используя подобные комбинации, а также похожие на кириллические символы из других блоков, можно писать тексты, в которых не будет работать поиск. Не зря для текстов модулей это запрещено стандартами 1С.

Можно комбинировать несколько знаков:

 

 

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

  • Кириллица:

 

 

Символы кириллицы располагаются по алфавиту. Все кроме Ё и ё. Это означает что: а) нельзя сортировать строки используя простое сравнение кодов символов и б) строчная буква из прописной получается простым увеличением кода символа на 20h для всех, кроме буквы Ё.

Далее следует

  • много блоков национальных языков: армянский, еврейский, арабский, языки южной азии, африки, индейские, иероглифы ККЯ (Китай, Корея, Япония) и их части, и другие системы письма.

Многие языки (например арабский) рассчитаны на массовое использование комбинированных знаков - к обычным буквам добавляются штрихи, черточки и т.п.

Среди символов встречаются очень необычные и красивые:

 

 

  • Надстрочные и подстрочные знаки:

 

 

  • Знаки валют:

 

 

  • Числовые формы:

 

 

  • Стрелки:

 

 

  • Математические операторы:

 

 

  • Обрамлённые буквы и цифры:

 

 

  • Псевдографика:

 

 

  • Геометрические фигуры:

 

 

  • Разные символы, в том числе офисные, религиозные, знаки зодиака, шахматные фигуры и т.п.:

 

 

  • Шрифт Брайля:

 

 

  • Обозначение технических и научных величин (может пригодиться для справочника ЕдиницыИзмерения. Только для печати, конечно же))

 

 

  • Музыкальные символы:

 

 

  • Символы «Канона великого сокровенного» (я не знаю, что это такое...)

 

 

  • Кости для маджонга:

 

 

  • Кости для домино:

 

 

  • Игральные карты:

 

 

Символы последних трех блоков, а также символы шахматных фигур вполне могут быть использованы при написании игр, в том числе на 1С))

Еще раз подчеркну, в разных шрифтах находятся разные наборы символов. Например, в стандартных шрифтах Windows 7 части вышеупомянутых символов просто нет.

 

Эмодзи

Эмодзи - это целая технология в рамках Unicode. Представляют собой цветные или монохромные картинки. Содержатся в шрифтах: Windows - Segoe UI Emoji, Android - Noto Color Emoji, macOS/iOS - Apple Color Emoji. Для  формирования картинки требуют специального рендера. Далеко не все программы обеспечивают полноценное отображение всех разновидностей эмодзи. Рендер 1С поддерживает не так уж много возможностей и делает это странно: часть эмодзи вообще не поддерживаются, часть не видна в полях ввода и декорациях, но видна в табличном документе, а часть поддерживается только в ячейке табличного документа в процессе редактирования ячейки (sic!). Так что эти строки я пишу с прицелом на будущие версии платформы. 1С поддерживает только монохромные эмодзи, для просмотра цветных вариантов буду использовать программу BabelPad. Кстати, рекомендую для просмотра шрифтов программу BabelMap того же производителя.

Эмодзи, в основном, расположены в блоках плоскости 1: "1F300-1F5FF Разные символы и пиктограммы (Miscellaneous Symbols and Pictographs)" и "1F900-1F9FF Дополнительные символы и пиктограммы (Supplemental Symbols and Pictographs)". Как утверждает документация, эмодзи можно получить из символов блока "2600-26FF Разные символы (Miscellaneous Symbols)" и "2700-27BF Dingbats (Dingbats)" с помощью дополнительного символа  U+FE0F VARIATION SELECTOR-16 (VS16), но у меня не получилось заметить хоть какого-то влияния этого модификатора на внешний вид.

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

Например:

Белый (полярный) мишка U+1F43B U+200D U+2744

 

 

Черный кот U+1F408 U+200D U+2B1B

 

 

Пиратский флаг U+1F3F4 U+200D U+2620

 

 

Рукопожатие U+1FAF1 U+200D U+1FAF2 

 

 

Профессии:

Космонавт U+1F468 U+200D U+1F680

 

 

Художница U+1F469 U+200D U+1F3A8

 

 

Фермер U+1F468 U+200D U+1F33E

 

 

Повар U+1F469 U+200D U+1F373

 

 

В этих примерах используется объединяющий символ U+200D - ZERO WIDTH JOINER (ZWJ)

Эти же эмодзи в цветном варианте выглядят так:

 

 

У эмодзи можно модифицировать цвет кожи (U+1F3FB - U+1F3FF), пол (U+2640, U+2642), прическу (U+1F9B0 - U+1F9B3).

Примеры:

Межрасовое рукопожатие U+1FAF1 U+1F3FF U+200D U+1FAF2 U+1F3FB

Скалолаз U+1F9D7

Скалолазка U+1F9D7 U+200D U+2640

Темнокожая скалолазка U+1F9D7 U+1F3FF U+200D U+2640

Бородатый мужчина U+1F9D4 U+200D U+2642

Кудрявая блондинка U+1F469 U+1F3FC U+200D U+1F9B1

Лысый негр U+1F9D1 U+1F3FF U+200D U+1F9B2

 

 

Много эмодзи, посвященных семейным отношениям:

U+1F469 U+200D U+1F91D U+200D U+1F468 

U+1F469 U+200D U+2764 U+200D U+1F468 

U+1F469 U+200D U+2764 U+200D U+1F48B U+200D U+1F468 

U+1F470 U+200D U+2640 

U+1F469 U+200D U+1F37C

U+1F468 U+200D U+1F469 U+200D U+1F466

U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466

Такие эмодзи тоже можно модифицировать с помощью оттенков кожи и, гм, пола.

 

 

В 1С это тоже частично работает, только изображение монохромное:

 

 

 

Целый класс эмодзи, к сожалению, не работает в Windows: флаги стран, составленные из букв “regional indicator symbol letter” (U+1F1E6 - 1F1FF). "RU" должен был бы превратиться во флаг России. Также не работают флаги Британского Содружества: U+1F3F4 U+E0067 U+E0062 U+E0073 U+E0063 U+E0074 U+E007F - это флаг Шотландии.

Зато работают эмодзи Keycaps:

'1' + U+20E3

 

 

Вместо первого символа можно использовать цифры, и символы '#' и '*'. Видимо, они сделаны для обозначения кнопок телефона. Кстати, это единственный вид составного эмодзи, который правильно отображается и в декорации, и в табличном документе 1С.

 

В заключение осталось отметить:

  • Программистам 1С надо иметь в виду, что современные тексты могут содержать последовательности символов, которые нельзя разрывать. Это необходимо учитывать при поиске в строке и при модификации строк.
  • Нестандартные символы можно вводить с помощью набора десятичного кода на цифровой клавиатуре при нажатой кнопке Alt
  • Все больше программ поддерживают эмодзи: MS Word - большое их количество, MS Excel - чуть меньше.
  • Надеюсь что рендер платформы 1С в скором времени улучшит поддержку эмодзи. 

Полезные ссылки:

Напомню, что тесты проводились в тонком клиенте 8.3.22.1709, со стандартными шрифтами Windows 11 Домашняя (Версия 22H2). На других платформах и ОС результаты могут быть иными. 

Как всегда, приветствуются замечания / дополнения / комментарии.

 
 Некоторые из прочих моих публикаций 

 

Таблица символов Юникод шрифт символ Unicode UTF16 UTF-16 суррогатная пара эмодзи Emoji ZWJ

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    126897    687    389    

738

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    8386    24    6    

46

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    4724    12    2    

38

SALE! %

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2280 руб.

14.01.2013    178921    1085    0    

862

Бустер Конвертации данных 3 (Infostart Toolkit)

Инструментарий разработчика 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    15102    3    12    

37

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99849    239    97    

298

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28419    4    10    

16

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18513    6    8    

40
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Andreyyy 75 07.04.23 08:35 Сейчас в теме
Очень познавательно, спасибо !
2. Alxby 1147 07.04.23 10:11 Сейчас в теме
(1)И Вам спасибо за комментарий!
3. aSHA-1 08.04.23 10:05 Сейчас в теме
4. Alxby 1147 08.04.23 15:32 Сейчас в теме
(3)Кодировка UTF8, как и другие кодировки (ANSI, OEM) - это совсем другая тема, связанная не с символами шрифта, а с кодированием текста в файлах, почтовых отправлениях и т.п. Поэтому все это осталось за рамками этой статьи, хотя тема интересная, взять хотя бы отличия UTF-16BE и UTF-16LE.
Оставьте свое сообщение