Конвертор строк в base64 формат

Кодировщик строки в Base64 формат и декодировщик из Base64 в строку.

Обработка демонстрирует пример преобразования строк в строки формата Base64 и обратно тремя различными методами.

Через создание временного файла в файловой системе: не рекомендуется для преобразования большого кол-ва строк, т.к. будете нагружать дисковую подсистему. (После написания обработки выяснилось, что подобный вариант уже есть на ИС: //infostart.ru/public/392252)

Другие 2 метода работают в оперативной памяти:

Свой велосипед: суть такова, что берем строку, преобразуем каждый символ (1с оперирует символами Юникода) в кодировку UTF-8 через манипуляции с байтами и битами (https://ru.wikipedia.org/wiki/Юникод#UTF-8), полученное значение пишем в поток, на его основе создаем двоичные данные, которые преобразуем в строку base64 встроенной функцией 1с. (Возможно, подобный механизм присутствует в //infostart.ru/public/300800)

И после создания своего движка по преобразованию нашел статью //infostart.ru/public/617021, на основе которой представлен 3-й (самый быстрый) метод конвертации: работает это просто — через Чтение/Запись данных и промежуточный поток в памяти.

Во всех трех методах поддерживается полная таблица символов Unicode.

Протестировано на платформе 8.3.10.

1 Comment

  1. kirillkr
    Функция СтрокаВBase64(СтрокаДанных) Экспорт
    
    Поток = Новый ПотокВПамяти;
    Запись = Новый ЗаписьДанных(Поток, КодировкаТекста.UTF8);
    Запись.ЗаписатьСимволы(СтрокаДанных);
    Запись.Закрыть();
    ДвоичныеДанные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
    СтрокаФорматBase64 = Base64Строка(ДвоичныеДанные);
    СтрокаФорматBase64 = СтрЗаменить(СтрокаФорматBase64, Символы.ВК, «»); // убираем ВК
    СтрокаФорматBase64 = СтрЗаменить(СтрокаФорматBase64, Символы.ПС, «»); // убираем ПС
    
    Возврат СтрокаФорматBase64;
    
    КонецФункции
    
    Функция СтрокаИзBase64(СтрокаФорматBase64) Экспорт
    
    ДвоичныеДанные = Base64Значение(СтрокаФорматBase64);
    Поток = Новый ПотокВПамяти;
    Запись = Новый ЗаписьДанных(Поток, КодировкаТекста.UTF8);
    Запись.Записать(ДвоичныеДанные);
    Запись.Закрыть();
    Данные = Новый ЧтениеДанных(Поток, КодировкаТекста.UTF8);
    СтрокаДанных = «»;
    Пока Не Данные.ЧтениеЗавершено Цикл
    СтрокаДанных = СтрокаДанных + Данные.ПрочитатьСтроку();
    КонецЦикла;
    Данные.Закрыть();
    Поток.Закрыть();
    
    Возврат СтрокаДанных;
    
    КонецФункции
    
    

    Показать

    Данный код работает с версии 8.3.9 или 8.3.10, т.е. там где появились потоки и работа с ними.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *