|
Запись текста в ПотокВПамяти
|
Я
|
|
Oldman06 30.09.20 - 11:59 | Приветствую. Пытаюсь избавиться от использования временных файлов.
С временным файлом:
ВременныйФайл = ПолучитьИмяВременногоФайла();
Запись = Новый ЗаписьТекста(ВременныйФайл, "UTF-8");
Запись.Записать("" + Настройки.ИдентификаторКлиента + ":" + Настройки.СекретнаяСтрока);
Запись.Закрыть();
ДД = Новый ДвоичныеДанные(ВременныйФайл);
получаю одни двоичные данные (правильные).
С потоком в памяти:
ПотокДанных = Новый ПотокВПамяти();
ЗаписьТекста = Новый ЗаписьТекста(ПотокДанных, "UTF-8");
ЗаписьТекста.Записать("" + Настройки.ИдентификаторКлиента + ":" + Настройки.СекретнаяСтрока);
ЗаписьТекста.Закрыть();
ДД = ПотокДанных.ЗакрытьИПолучитьДвоичныеДанные();
получаю совершенно другие двоичные данные, да еще и короче на 3 байта.
Я что-то не знаю о потоках в 1С? Никогда с ними не работал до этого. |
Franchiser 1 - 30.09.20 - 12:00 | ( 0) а почему они должны совпадать? |
Oldman06 2 - 30.09.20 - 12:02 | ( 1) А почему нет?
Посмотрел внимательней. В двоичных данных полученных через поток отсутствуют первые 3 баата (EF BB BF) |
Oldman06 3 - 30.09.20 - 12:03 | В остальном двоичные данные совпадают.
|
Franchiser 4 - 30.09.20 - 12:04 | Обычно в файлах если смотреть hex пишется в начало некая информация о формате - подпись : txt, jpg и т.д.
А поток может это не писать.
|
mikecool 5 - 30.09.20 - 12:05 | ( 2) запиши в файл и прочитай из него ДД, будут совпадать? |
fisher 6 - 30.09.20 - 12:05 | |
Franchiser 7 - 30.09.20 - 12:05 | EF BB BF - это кодировка UTF 8
|
Chameleon1980 8 - 30.09.20 - 12:06 | ( 4) с куали там что-то пишется в начале? там пишется только то, что ты пишешь |
Oldman06 9 - 30.09.20 - 12:07 | Все, спасибо. Уже разобрался.
|
Franchiser 10 - 30.09.20 - 12:08 | ( 8) если у тебя есть файл-картинка, и ты изменил ему удалил расширение, то есть программы которые могут все-равно понять что это картинка, или найти через hex определенную подпись. |
trad 11 - 30.09.20 - 12:08 | ( 8) как бы файл в юникоде должен в начале содержать BOM
Для утф8 - это (7) |
fisher 12 - 30.09.20 - 12:11 | ( 11) Не "должен" - "может". |
fisher 13 - 30.09.20 - 12:15 | ( 9) А как разобрался, кстати? Вообще странно, что по-разному пишет. И без BOM, ЕМНИП, 1С нельзя заставить писать. Только выкусывать. |
Franchiser 14 - 30.09.20 - 12:16 | ( 13) вероятно не указал где-то кодировку |
fisher 15 - 30.09.20 - 12:19 | Ыыыы! В конструкторе ЗаписьТекста() на основании потока можно управлять BOM, а в файловом - нельзя :)
|
fisher 16 - 30.09.20 - 12:20 | И просто по дефолту в память без BOM пишется. РТФМ, короче.
|
Oldman06 17 - 30.09.20 - 12:21 | ( 13) Двоичные данные отличаются только наличием 3 байтов (EF BB BF) в случае с временным файлом, в остальном идентичны. Просто я сразу не заметил, так как сверял с начала. Вероятно это BOM. В любом случае, далее он не нужен и отрезался. Все это для формирования тела POST-запроса. |
trad 18 - 30.09.20 - 12:22 | (15) ну вот видимо в одинес считают что не "может", а "должен"
)) |
Franchiser 19 - 30.09.20 - 12:23 | при желании можно BOM отдельно дописать
|
fisher 20 - 30.09.20 - 12:27 | ( 18)( 19) Ну вот как раз при записи в память пятым параметром конструктора можно явно указать - писать BOM или нет. |
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.