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

05.04.23

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Таблица символов, или что скрывает обычный шрифт:
.erf 25,77Kb
14
14 Скачать (1 SM) Купить за 1 850 руб.

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

См. также

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

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

15500 руб.

02.09.2020    182867    1017    403    

964

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    23654    156    84    

155

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

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

22200 руб.

06.10.2023    20111    51    19    

86

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

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

15000 руб.

10.11.2023    13540    55    33    

76

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    30287    103    48    

147

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    2244    4    0    

7

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

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

20000 руб.

07.10.2021    19037    7    32    

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