Кодирование строк в формат Base64 и обратно в 1С 8.Х

Опубликовал Имя Фамилия (4Dimensions) в раздел Программирование - Практика программирования

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

Была уже публикация с примером кода для 1С //infostart.ru/public/252365/

Но, по-моему, это велосипед. Моя обработка в 10 строк кода выглядит элегантнее)) Cool

 

Вот пример кода:

&НаКлиенте
Процедура Decode(Команда)
	
	ДвДанные = Base64Значение(Encoded);
	Если ДвДанные = Неопределено Тогда
		Предупреждение("Ошибка формата Base64");
		Возврат;
	КонецЕсли;
	ВременныйФайл = ПолучитьИмяВременногоФайла();
	ДвДанные.Записать(ВременныйФайл);
	
	КодировкаФайла = Кодировка;
	
	Если Кодировка = "ANSI" Тогда
		КодировкаФайла = КодировкаТекста.ANSI;
		
	ИначеЕсли Кодировка = "OEM" Тогда
		КодировкаФайла = КодировкаТекста.OEM;
		
	ИначеЕсли Кодировка = "UTF8" Тогда
		КодировкаФайла = КодировкаТекста.UTF8;
		
	ИначеЕсли Кодировка = "UTF16" Тогда
		КодировкаФайла = КодировкаТекста.UTF16;
		
	ИначеЕсли Кодировка = "Системная" Тогда
		КодировкаФайла = КодировкаТекста.Системная;
	
	КонецЕсли;
	Чтение = Новый ЧтениеТекста(ВременныйФайл, КодировкаФайла);
	Decoded = Чтение.Прочитать();
	Чтение.Закрыть();
	УдалитьФайлы(ВременныйФайл);
	
КонецПроцедуры

&НаКлиенте
Процедура Encode(Команда)
	
	КодировкаФайла = Кодировка;
	
	Если Кодировка = "ANSI" Тогда
		КодировкаФайла = КодировкаТекста.ANSI;
		
	ИначеЕсли Кодировка = "OEM" Тогда
		КодировкаФайла = КодировкаТекста.OEM;
		
	ИначеЕсли Кодировка = "UTF8" Тогда
		КодировкаФайла = КодировкаТекста.UTF8;
		
	ИначеЕсли Кодировка = "UTF16" Тогда
		КодировкаФайла = КодировкаТекста.UTF16;
		
	ИначеЕсли Кодировка = "Системная" Тогда
		КодировкаФайла = КодировкаТекста.Системная;
	
	КонецЕсли;
	ВременныйФайл = ПолучитьИмяВременногоФайла();
	
	Запись = Новый ЗаписьТекста(ВременныйФайл, КодировкаФайла);
	Запись.Записать(Decoded);
	Запись.Закрыть();
	
	ДвДанные = Новый ДвоичныеДанные(ВременныйФайл);
	Encoded = Base64Строка(ДвДанные);
	
	УдалитьФайлы(ВременныйФайл);
	
КонецПроцедуры

Скачать файлы

Наименование Файл Версия Размер
Base64Decode.epf
.epf 6,71Kb
01.09.15
10
.epf 6,71Kb 10 Скачать

См. также

Комментарии
1. Александр Шпагин (alexandersh) 176 09.05.17 16:08 Сейчас в теме
сорри... мой комментарий был к другой публикации, промазал)
2. Алексей (Alexey_) 21 09.05.17 17:09 Сейчас в теме
Моя обработка в 10 строк кода выглядит элегантнее))

Особенно элегантно выглядит вот этот фрагмент:
Если Кодировка = "ANSI" Тогда
        КодировкаФайла = КодировкаТекста.ANSI;
        
    ИначеЕсли Кодировка = "OEM" Тогда
        КодировкаФайла = КодировкаТекста.OEM;
        
    ИначеЕсли Кодировка = "UTF8" Тогда
        КодировкаФайла = КодировкаТекста.UTF8;
        
    ИначеЕсли Кодировка = "UTF16" Тогда
        КодировкаФайла = КодировкаТекста.UTF16;
        
    ИначеЕсли Кодировка = "Системная" Тогда
        КодировкаФайла = КодировкаТекста.Системная;
    
    КонецЕсли;
...Показать Скрыть
3. Имя Фамилия (4Dimensions) 3 09.05.17 23:44 Сейчас в теме
(2), ну мир без костылей был бы идеален до безобразия))
можно использовать кодировку по умолчанию (опустить этот параметр), посмотри что будет.... я уже не помню зачем этот костыль был придуман
4. Алексей (Alexey_) 21 10.05.17 08:29 Сейчас в теме
(3) я о том, что этот фрагмент можно заменить одной строкой
КодировкаФайла = КодировкаТекста[Кодировка];
Оставьте свое сообщение