gifts2017

Код символа OEM

Опубликовал Павел Шальков (pavel-rosa) в раздел Программирование - Практика программирования

Как получить код символа в кодировке OEM средствами платформы 1С V8?

Стояла задача определить код символа в кодировке OEM силами платформы 1С V8. Как известно, платформа 1С предоставлет возможность определять код символа методом КодСимвола(), но загвоздка в том, что данный метод возвращает код в соответствии с кодировкой Unicode.

Было найдено решение, основанное на строковом представлении значений типа ДвоичныеДанные.

Суть метода состоит в следующем: исходная строка записывается в файл через объект типа ТекстовыйДокумент, используя кодировку OEM, затем создается объект типа ДвоичныеДанные на основе этого файла, далее анализируется строковое представление объекта. Строковое представление позволяет нам "увидеть" байты, т.е. коды символов переданной строки в шестнадцатеричном виде. Остается лишь преобразовать шестнадцатеричные коды в десятичные.

Ниже приведен пример функции:

 

Функция КодСимволаOEM(Строка, НомерСимвола)

    Алфавит16 = Новый Соответствие();
    Для Сч = 0 По 9 Цикл
        Алфавит16.Вставить(Формат(Сч, "ЧН="), Сч);
    КонецЦикла;
    Для Сч = КодСимвола("A") По КодСимвола("F") Цикл
        Алфавит16.Вставить(Символ(Сч), Алфавит16.Количество());
    КонецЦикла;

    ИФ = ПолучитьИмяВременногоФайла();

    Текст = Новый ТекстовыйДокумент();
    Текст.УстановитьТекст(Строка);
    Текст.Записать(ИФ, КодировкаТекста.OEM);

    ДД = Новый ДвоичныеДанные(ИФ);

    Приемник = Строка(ДД);
    Приемник = " " + Приемник;

    БайтСтр = ВРег(СокрЛП(Сред(Приемник, (НомерСимвола - 1) * 3 + 1, 3)));

    Результат = Алфавит16[Лев(БайтСтр, 1)] * 16 + Алфавит16[Прав(БайтСтр, 1)];

    Возврат Результат;

КонецФункции


См. также

Подписаться Добавить вознаграждение

Комментарии

1. eugenie zheludkov (eugeniezheludkov) 21.01.15 08:28
воу а не проще использовать чтото вроде

Функция КодСимволаОЕМ(Символ)
     Возврат Найти(" !""№;%:?*()*абвгдеёжз и т.д 255-31 символов",Символ)+31;
КонецФункции

просто если текста много то вариант с созданием файла на каждый символ это ППЦ
softcreator; +1 Ответить 1
2. Александр Загребельный (hobi) 27.03.15 10:42
(1) eugeniezheludkov, да.

Добавил в вашу функцию сгенерированную строку:

Функция КодСимволаОЕМ(Символ)
	 
     СтрокаОЕМ = " !""#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ ";
     Возврат Найти(СтрокаОЕМ,Символ) + 31;

КонецФункции
...Показать Скрыть
eugeniezheludkov; +1 Ответить
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа