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