Каталог решений - Запись текста в кодировке UTF-8 без BOM из 1с 8.2

Запись текста в кодировке UTF-8 без BOM из 1с 8.2

Запись текста в кодировке 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".

Примечание. понимаю, что через "ж", но если кто подскажет другой вариант это будет интересно со всех сторон.

А в остальном: кому нужно - пользуйтесь и экспериментируйте.
has been added to your cart:
Оформление заказа