К статье
Практический материал

Разработка и Конфигурация · 8 мин

Как узнать код символа в 1С

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

Функция КодСимвола() во встроенном языке 1С возвращает числовой код символа в кодировке Unicode. Она применяется при разборе строк посимвольно, проверке ввода, генерации диапазонов символов, работе со специальными знаками и отладке текстовых данных, где символы выглядят одинаково, но имеют разные коды.

Обратная задача — получить символ по известному коду — решается функцией Символ(). Вместе эти две функции покрывают практически все сценарии низкоуровневой работы с текстом: от поиска «невидимых» символов в наименованиях номенклатуры до формирования служебных строк с табуляцией и переносом строки.

Ниже разобраны синтаксис, практические примеры, частые ошибки и способы проверки результата. Все примеры работают как в тонком и толстом клиенте, так и на сервере, включая внешние обработки и консоль кода.

Функция КодСимвола: синтаксис и поведение

Функция имеет два параметра: КодСимвола(Строка, Позиция). Первый — строка, из которой берётся символ, второй — необязательный номер позиции (нумерация начинается с 1). Если позицию не указывать, берётся первый символ строки.

Код = КодСимвола("А");        // 1040 — кириллическая А

Код = КодСимвола("A"); // 65 — латинская A

Код = КодСимвола("Пример", 3); // 1080 — третий символ «и»

Результат — число типа «Число», соответствующее коду символа в Unicode. Это важно при сравнении похожих символов: кириллическая «А» и латинская «A» выглядят одинаково, но их коды различаются, из-за чего поиск и сравнение строк могут неожиданно не срабатывать.

Если позиция выходит за границы строки или строка пустая, поведение зависит от контекста, поэтому перед обращением к символу строку стоит проверять на длину через СтрДлина().

Получение символа по коду: функция Символ

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

ПереносСтроки = Символ(10);   // LF — перевод строки

ВозвратКаретки = Символ(13); // CR

Табуляция = Символ(9); // табуляция

НеразрывныйПробел = Символ(160);

Для переноса строки в платформе есть и предопределённое значение Символы.ПС, а также Символы.Таб, Символы.ВК — их удобнее использовать вместо «магических» чисел, так код читается лучше.

Практические сценарии использования

Поиск скрытых и «чужих» символов в данных

Частая задача — найти в наименовании товара или ФИО контрагента неразрывный пробел, табуляцию или латиницу вместо кириллицы. Такие символы ломают поиск, сортировку и обмен данными, хотя визуально строка выглядит нормально.

Для Поз = 1 По СтрДлина(Текст) Цикл

Код = КодСимвола(Текст, Поз);

Если Код = 160 Тогда

Сообщить("Неразрывный пробел на позиции " + Поз);

КонецЕсли;

КонецЦикла;

Проверка допустимости ввода

Через коды удобно проверять, что строка содержит только цифры (коды 48–57), только кириллицу (основной диапазон 1040–1103) или только латиницу. Это применяется при валидации артикулов, кодов и идентификаторов перед записью в базу.

Генерация диапазонов символов

Цикл по кодам позволяет сформировать алфавит или последовательность значений, например буквенные индексы для нумерации:

Для Код = КодСимвола("А") По КодСимвола("Я") Цикл

Сообщить(Символ(Код));

КонецЦикла;

Как узнать код символа через консоль кода
  1. 1
    Откройте внешнюю обработку «Консоль кода» или любую форму, где можно выполнить произвольный код
  2. 2
    Введите выражение: Сообщить(КодСимвола("А")) — с нужным символом в кавычках
  3. 3
    Выполните код и посмотрите выведенное число — это код символа в Unicode
  4. 4
    Для проверки выполните обратное: Сообщить(Символ(ПолученныйКод)) — должен вывестись исходный символ

Как проверить результат и где выполнять код

Самый быстрый способ узнать код конкретного символа — выполнить выражение в консоли кода или в отладчике. В отладчике достаточно остановиться в любой точке и в окне «Вычислить выражение» набрать КодСимвола("Ж") — результат появится сразу, без изменения конфигурации.

Для проверки корректности преобразования используйте круговой тест: Символ(КодСимвола(СимволИсходный)) должен вернуть исходный символ. Если возвращается другой знак — в исходных данных был не тот символ, который вы видели на экране (например, латиница вместо кириллицы).

Контрольные точки

Как проверить результат

Круговое преобразование Символ(КодСимвола(Х))
Норма

Возвращается исходный символ

Тревожный признак

Возвращается другой знак — в данных скрытый или похожий символ

Код пробельного символа
Норма

32 — обычный пробел, 160 — неразрывный, 9 — табуляция

Тревожный признак

Ожидался пробел, а код другой — строка содержит служебный символ

Код буквы в идентификаторе
Норма

Кириллица 1040–1103, латиница 65–90 и 97–122

Тревожный признак

Код вне ожидаемого диапазона — смешение алфавитов

Типичные ошибки и ограничения

Главная ошибка — путать код символа и позицию. КодСимвола возвращает код знака в Unicode, а не его номер в строке. Для позиции вхождения подстроки используется функция СтрНайти().

Вторая распространённая проблема — сравнение строк «на глаз» вместо сравнения кодов. Если запрос или поиск не находит заведомо существующее значение, пройдитесь по строке посимвольно и выведите коды: почти всегда обнаруживается неразрывный пробел, латинская буква или невидимый управляющий символ, попавший в данные при копировании из Excel или внешних систем.

Также учитывайте, что часть символов Unicode (эмодзи и некоторые редкие знаки) кодируется суррогатными парами — одним «символом» с точки зрения пользователя могут быть две кодовые позиции. При посимвольном разборе таких строк результат может отличаться от ожидаемого.

Типичные ошибки
01
Использовать КодСимвола для поиска подстроки — для этого есть СтрНайти, а код символа сравнение не заменяет
02
Обращаться к позиции без проверки СтрДлина — риск ошибки или неожиданного результата на пустой строке
03
Сравнивать строки визуально вместо посимвольной проверки кодов — скрытые символы остаются незамеченными
04
Забыть, что латинская и кириллическая буквы имеют разные коды — поиск и отборы перестают находить данные

Альтернативные способы узнать код символа

Если под рукой нет консоли кода, код символа можно посмотреть внешними средствами: в Windows — через стандартное приложение «Таблица символов» (charmap), где внизу окна отображается код выбранного знака. Однако учтите, что таблица может показывать код в шестнадцатеричном виде, а Символ() в 1С принимает десятичное число — значение потребуется перевести.

Для разового анализа строки из базы удобно выгрузить значение в текстовый файл и посмотреть коды в редакторе, отображающем служебные символы. Но для регулярной работы надёжнее написать небольшую обработку, которая выводит таблицу «символ — код» для произвольной строки.

Способы узнать код символа

КодСимвола в консоли кода

Самый быстрый и точный способ внутри 1С; требует права на выполнение произвольного кода

Отладчик, окно «Вычислить выражение»

Подходит, когда код уже выполняется; не требует отдельных инструментов

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

Работает без 1С, но код выводится в шестнадцатеричном виде и не проверяет реальные данные базы

Внешняя обработка посимвольного разбора

Оптимальна для регулярного анализа строк целиком; требует однократной разработки

Частые вопросы

Чем КодСимвола отличается от СтрНайти?

КодСимвола возвращает числовой код Unicode одного символа в указанной позиции. СтрНайти ищет подстроку в строке и возвращает позицию её начала. Это разные задачи: первая — про представление символа, вторая — про поиск текста.

Какой код у обычного и неразрывного пробела?

Обычный пробел имеет код 32, неразрывный — 160. Внешне они неотличимы, поэтому неразрывный пробел часто становится причиной «не находящихся» строк. Заменить его можно через СтрЗаменить(Текст, Символ(160), " ").

Как вставить перенос строки в строковое значение?

Используйте Символы.ПС или Символ(10). Для совместимости с Windows-форматами иногда нужна пара CR+LF: Символ(13) + Символ(10). В многострочных строковых литералах в модуле перенос можно задать и символом вертикальной черты.

Почему КодСимвола возвращает не тот код, который я ожидаю?

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

Работает ли КодСимвола на сервере и в веб-клиенте?

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

Как узнать коды сразу всех символов строки?

Организуйте цикл от 1 до СтрДлина(Строка), внутри вызывайте КодСимвола(Строка, Позиция) и выводите пару «символ — код» через Сообщить или в таблицу значений. Это стандартный приём диагностики «грязных» строк из обменов и загрузок.

Итог

Что важно запомнить

Код символа в 1С возвращает функция КодСимвола(Строка, Позиция), обратное преобразование делает Символ(Код). Посимвольная проверка кодов — основной способ найти скрытые символы, из-за которых ломаются поиск, сравнение и обмен данными.