Запись текста в кодировке UTF-8 без BOM из 1с 8.2
Как-то хочется из 8.2 записать в кодировке "UTF-8 без BOM" любым из менее затратных способов.
- Описание
- Подробнее
Описание
Смысл такой: на WEB-сайт потребовалось выгрузить файл в кодировке UTF-8. Но проблема в том, что UTF-8 имеет 2 варианта: «с BOM» и «без BOM». Файлы, сохраненные в этих двух кодировках, получаются одинаковые за исключением того, что в первом случае в начало файла добавлены три байта EF BB BF (в 16-ричной системе счисления). Это и есть символы BOM (сигнатура Byte Order Mark). Так вот, на сайт нужно было отправить «без BOM», а 1с 8.2 сохраняет исключительно «с BOM».
Вот из-за того, что 1с 8.2 не может сохранять текстовые файлы в нужном мне формате и возникла идея «вырезать» эти символы из двоичного файла, но как это сделать в 1с 8.2, я не нашел. Там вообще работа с двоичными данными очень ограничена.
Поэтому пошел по простому пути: что не изобретено, на том катаемся.
Придумал через «очень много» так:
это приблизительный код вызова:
текст = Новый ТекстовыйДокумент;
...
здесь в "текст" что-то пихаем
...
папкаФайла = "какая-то папка\";
папкаВОМ = папкаФайла+"temp_BOM\";
имяФайла = "как-то.почему-то";
СоздатьКаталог(папкаВОМ);
текст.Записать(папкаВОМ+имяФайла, КодировкаТекста.UTF8, Символы.ВК);
УбитьВОМ(папкаВОМ+имяФайла, папкаФайла+имяФайла, папкаВОМ);
далее непосредственно главная процедура "УбитьВОМ":
Процедура УбитьВОМ(Знач ИсходныйФайл, РезультирующийФайл, ВременнаяПапка, МассивФайлов = Неопределено)
Если МассивФайлов = Неопределено Тогда
МассивФайлов = Новый Массив;
КонецЕсли;
бин = Новый ДвоичныеДанные(ИсходныйФайл);
размер = бин.Размер();
новыйРазмер = Макс(Окр(размер/2,0),3);
массив = РазделитьФайл(ИсходныйФайл,новыйРазмер);
Если массив.Количество() = 2 Тогда
МассивФайлов.Вставить(0,массив[1]);
КонецЕсли;
Если новыйРазмер = 3 Тогда
ОбъединитьФайлы(МассивФайлов,РезультирующийФайл);
УдалитьФайлы(ВременнаяПапка);
Иначе
УбитьВОМ(массив[0],РезультирующийФайл,ВременнаяПапка,МассивФайлов);
КонецЕсли;
КонецПроцедуры
В результате получается файл в кодировке "UTF-8 без BOM".
Примечание. понимаю, что через "ж", но если кто подскажет другой вариант это будет интересно со всех сторон.
А в остальном: кому нужно - пользуйтесь и экспериментируйте.

