Как найти кода символа?
-

Как найти кода символа?

2
15680
24.09.2021 Анна Лисовая

Содержание:

1.       Функция «КодСимвола()» в системе кодировки Unicode

2.       Код символа в кодировке СР1251

3.       Код в ОЕМ


Приветствую, коллеги! В данной статье речь пойдёт о том, как получать коды символов в 1С в стандартном виде, а также в кодировке СР1251 и кодировке ОЕМ. Кроме теоретических сведений, каждый случай будет рассмотрен на практическом примере.


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


Чтобы проводить кодировку в операционной системе Windows, используют таблицы кодировки ASCII – American Standard Code for Interchange of Information. Стоит отметить, что в системе ASCII первые 120 символов принадлежат базовой таблице символов. А первые 32 кода в базовой таблице (включая нулевой) – это коды управления.  


1.      Функция «КодСимвола()» в системе кодировки Unicode


Специальную функция в системе 1С, которая помогает найти код символа, – это «КодСимвола()». Её синтаксис выглядит следующим образом:



Рисунок 1 Синтаксис функции "КодСимвола()"


Параметра у функции «КодСимвола()» два, рассмотрим их:


· «ИсходнаяСтрока» – это параметр строчного типа, который содержит исходную строку; данный параметр является обязательным;


· «НомерСимвола» – этот параметр числового типа обозначает порядковый номер символа внутри строки, код которого нам необходим. Нумерация символов внутри строки начинается с единицы, значение по умолчанию также «1».


Результатом работы данной функции является значение, которое она возвращает – это число, которое и является кодом символа, расположенным в строке, которая была передана строке с позицией, указанной номером. Полученный код принадлежит системе кодировки Unicode.


Данную функцию можно использовать на тонком клиенте, на веб-клиенте, на мобильном клиенте, на толстом клиенте, на сервере, при внешнем соединении, а также для мобильного приложения и на клиенте, и на сервере.


Рассмотрим, как выглядит и работает функция «КодСимвола()» на примере:



Рисунок 2 Функция «КодСимвола()» в системе кодировки Unicode  


2.      Код символа в кодировке СР1251


Иногда бывают случаи, когда нужно, например, получить контрольную сумму в строке, а для этого нужен код каждого из символов строки. Функция «КодСимвола()» возвращает код из системы кодировки Unicode. Рассмотрим пример для получения иной кодировки символа – СР1251:



Рисунок 3 Получение кода символа СР1251  


3.      Код в ОЕМ


Рассмотрим, как происходит получение кода в ОЕМ при помощи платформы 1С. Решение данной задачи основывается на значениях строк с типом «ДвоичныеДанные». Суть метода заключается в том, что первичная строка отправляется в файл при помощи объекта с типом «ТекстовыйДокумент». При этом используется кодировка ОЕМ. Далее появляется новый объект с типом «ДвоичныеДанные», который также основывается на файле и происходит анализ представления объекта в виде строки. При помощи строкового представления появляется возможность видеть байты, что и является кодом символов, в виде шестнадцатеричного представления. После этого остаётся только сделать преобразование из кодов шестнадцатеричного вида в коды десятичного вида.


Далее приведён пример такой функции, которая выполняет всё вышеописанное и преобразует строку в код ОЕМ:



Рисунок 4 Преобразование строки в код ОЕМ


Специалист компании «Кодерлайн»

Анна Лисовая

Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

0
Дмитрий Кондратьев
В свежих платформах можно проще получить
• код символа в других кодировках — с помощью функции ПолучитьБуферДвоичныхДанныхИзСтроки,
• а также получить символ из кода — с помощью функции ПолучитьСтрокуИзБуфераДвоичныхДанных:
Код
Функция КодСимволаANSI(Строка, НомерСимвола = 1)
    Возврат КодСимволаКодировка(Строка, НомерСимвола, КодировкаТекста.ANSI)
КонецФункции

Функция КодСимволаOEM(Строка, НомерСимвола = 1)
    Возврат КодСимволаКодировка(Строка, НомерСимвола, КодировкаТекста.OEM)
КонецФункции

Функция КодСимволаКодировка(Строка, НомерСимвола, Кодировка)
    Код = КодСимвола(Строка, НомерСимвола);
    // первые 128 символов (0 … 127) одинаковы для Unicode, ANSI, OEM
    Если Код < 128 Тогда
        Возврат Код
    КонецЕсли;

    Код = ПолучитьБуферДвоичныхДанныхИзСтроки(Символ(Код), Кодировка)[0];
    // отсутствующие в кодировке символы преобразуются в знак вопроса „?” (код 63)
    Возврат ?(Код = 63, -1, Код)
КонецФункции

Функция СимволANSI(Код)
    Возврат СимволКодировка(Код, КодировкаТекста.ANSI)
КонецФункции

Функция СимволOEM(Код)
    Возврат СимволКодировка(Код, КодировкаТекста.OEM)
КонецФункции

Функция СимволКодировка(Знач Код, Кодировка)
    Код = Цел(Код);
    // в кодировках ANSI, OEM только 256 символов (0 … 255)
    Если Код < 0 ИЛИ Код > 255 Тогда
        Возврат ""
    // первые 128 символов (0 … 127) одинаковы для Unicode, ANSI, OEM
    ИначеЕсли Код < 128 Тогда
        Возврат Символ(Код)
    КонецЕсли;

    Буфер = Новый БуферДвоичныхДанных(1);
    Буфер[0] = Код;
    Возврат ПолучитьСтрокуИзБуфераДвоичныхДанных(Буфер, Кодировка)
КонецФункции
Имя Цитировать 0
0
John Irwin
Еще не рассмотрели вопрос как работать с символами, код который больше 65535. В юникоде больше 140 тысяч символов и для части их них используется два слова по 2 байта (итого 4 байта). 1С умеет с ними работать, но с каждым словом по-отдельности. Например, для вывода символа "инопланетянин" (U+1F47D или "\ud83d\udc7d" в два слова) можно выполнить "Строка = Символ(55357) + Символ(56445);". При этом если показать строку в отладчике или вывести на форму будет показан один символ, но СтрДлина() вернет длину 2. КодСимвола() также работает только с одним словом, поэтому надо для каждого символа (в терминах 1С) выполнять эту функцию.
Имя Цитировать 0
Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Услуги программиста 1С
Получите специалиста
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.