Запис тексту в кодуванні utf-8 без bom з 1с 8

19. Олексій (Alex1c) 17 10.10.13 16:09 Зараз в темі

Писав обробку для хешування по ГОСТ за допомогою стороннього EXE. Програма працювала через командний рядок. Необхідно було вказати їй шлях до файлу з даними на вхід. Вона генерітся вихідний файл з хешем.
Поимел проблему. У мене був тестовий файл і файл сгенеренний 1С, на вигляд абсолютно однакові. Різниця в розмірі в 2 байта. Хеш програма видавала різний. Виявилося що за замовчуванням 1С вказується символ перекладу рядка і при створенні файлу і при додаванні рядка. Вказав в обох місцях в якості символу "" і все пішло. Використовував багато ідей з цього поста. Можливо комусь буде корисний повний код.


// очистили входить файл
УдалітьФайли (КаталогВременнихФайлов () + "in.txt");
ТекстIn = Новий ЗапісьТекста (КаталогВременнихФайлов () + "in.txt", КодіровкаТекста.UTF8, "", Брехня,);
ТекстIn.ЗапісатьСтроку (Рядок (СокрЛП (ВРЕГ (ВходящіеДанние))));
ТекстIn.Закрить ();

// обрізаємо ВВП
ОБ_ДД = Новий ДвоічниеДанние (КаталогВременнихФайлов () + "in.txt");
Стр_Base64 = Base64Строка (ОБ_ДД);
ОБ_ДД = Base64Значеніе (Серед (Стр_Base64,5));
ОБ_ДД.Запісать (КаталогВременнихФайлов () + "in.txt");

// очистили вихідний файл
УдалітьФайли (КаталогВременнихФайлов () + "out.txt");
ТекстOut = Новий ЗапісьТекста (КаталогВременнихФайлов () + "out.txt", КодіровкаТекста.UTF8,, Брехня,);
ТекстOut.Закрить ();

// запустили додаток хеширования
ЗапустітьПріложеніе (Рядок (имяфайла) + "--gost-cryptopro" + КаталогВременнихФайлов () + "in.txt" + "" + "- output =" + КаталогВременнихФайлов () + "out.txt" ,, Істина,);

// прочитали з вихідного файлу результат
Текст = Новий ЧтеніеТекста (КаталогВременнихФайлов () + "out.txt", КодіровкаТекста.UTF8);
Стр = Текст.ПрочітатьСтроку ( ""); // при створенні файлу переклад рядка прибрали, при читанні теж прибрали, тобто читаємо весь файл як рядок