Имя: Пароль:
1C
 
Запись текстового файла - служебные символы в начале файла. Как убрать?
0 Stasinus
 
26.08.09
11:41
Задача - записываю текстовый файл на ФТП в кодировке UTF8.
Проблема - 1С-ка дописывает в начале файла 3 служебных символа.
Если открывать файл, скажем, блокнотом, их нет. Если же делать VIEW тем же Far'ом - они есть.

Этот файл в дальнейшем открывается на линуксовой машине перлом, там они ессно тоже есть.

Вопрос - как заставить 1с-ку НЕ ПИСАТЬ эти символы?
1 Rie
 
26.08.09
11:42
(0) А надо ли их убирать?
2 Дуб
 
26.08.09
11:44
(0) инициируй запись через VBS
3 Rie
 
26.08.09
11:44
+(1) Это сигнатура, EF BB BF, используется для определения порядка байтов.
4 Stasinus
 
26.08.09
11:47
(1) Надо. Человек, отвечающий за линуксовую систему и перловый скрипт, открывающий эти файлы, ругается. Говорит "убирай нафик".

(3) Да, но он говорит мол они деприкейтэд. Мол нафик не нужны уже.

(2) Не знаю, что это :-)
5 Rie
 
26.08.09
11:49
(4) Deprecated, конечно. Не нужны - запиши файл, а потом вырежи их.
6 shuhard
 
26.08.09
11:49
(4) раз надо - код покажи, чем пишешь
7 eklmn
 
гуру
26.08.09
11:56
(4) ему надо, пусть и обрезает
8 Stasinus
 
26.08.09
12:06
(5) Я еще не пробовал, но уверен на 99,9%, что если этот файл опять таки открывать 1с-кой, то этих символов она не увидит.

(6)
ФайлПередачи = Новый ТекстовыйДокумент();
ФайлПередачи.УстановитьТипФайла("UTF-8"); (хоть и по умолчанию UTF-8, на всяк. случай устанавливаю)

...
ДокументПередачиКоманды.ДобавитьСтроку(СтрокаКоманды);
...

ДокументПередачиКоманды.Записать(ПутьФайла,КодировкаТекста.UTF8); (тоже пробовал указывать кодировку тут, может поможет - не помогло)
9 Stasinus
 
26.08.09
12:07
Точнее так:

ФайлПередачи = Новый ТекстовыйДокумент();
ФайлПередачи.УстановитьТипФайла("UTF-8"); (хоть и по умолчанию UTF-8, на всяк. случай устанавливаю)

...
ФайлПередачи.ДобавитьСтроку(СтрокаКоманды);

...

ФайлПередачи.Записать(ПутьФайла,КодировкаТекста.UTF8); (тоже пробовал указывать кодировку тут, может поможет - не помогло)
10 Rie
 
26.08.09
12:09
(8) Конечно же, не увидит. А зачем их _видеть_? Записанный файл прочитать чем-либо (той же 1С-кой) и записать без первых 3 символов.
11 Stasinus
 
26.08.09
12:13
(10) То ли лыжи не едут... Либо я не понимаю, что ты имеешь ввиду.

Ты предлагаешь открыть файл, вырезать эти 3 символа и записать результат опять в файл.
Если я буду открывать файл тем же ТекстовымДокументом, то как я вырежу эти символы, если они для 1с-ки не видны?
Если буду записывать тем же ТекстовымДокументом, 1с-ка опять их вставит.

Или ты предлагаешь каким-то другим механизмом файл читать/записывать?
12 Rie
 
26.08.09
12:17
(11) Разумеется, другим.
13 Kom-off
 
26.08.09
12:26
Можно попробовать "ЗаписьТекста".
14 Stasinus
 
26.08.09
12:38
(13) ЗаписьТекста выдает тот же результат
15 Kom-off
 
26.08.09
12:40
Кодировка обязательно должна быть UTF-8 ?
16 Stasinus
 
26.08.09
12:45
(15) Да, обязательно. Там передаются в том числе кириллические символы.
17 Kom-off
 
26.08.09
12:52
А попробовать другие кодировки кириллическими символами, например: KOI8-r, если не ошибаюсь CP866, windows-1251?
18 Rie
 
26.08.09
13:17
(15) Твоему человеку на линуксовой машине убрать эти 3 байта - как два пальца об асфальт. Но ему лень. А тебе?

Не пытайся записывать этот текст в UTF-8 без этих 3 байтов. Запиши файл, потом скопируй его куда надо без этих первых 3 символов. Чем угодно.
19 Stasinus
 
26.08.09
13:45
(to All)
Всем спасибо за ответы.
Решили действительно не геммороиться, эти символы будут убираться перловым скриптом.
20 H A D G E H O G s
 
26.08.09
13:54
Текст=Новый ТекстовыйДокумент;
   Текст.УстановитьТипФайла(КодировкаТекста.UTF8);
   Текст.ДобавитьСтроку("Йа - дьятель!");
   Текст.Записать("C:\Дятель.utf");
   Текст=Неопределено;
   Данные=Новый ДвоичныеДанные("C:\Дятель.utf");
   Строка64=Base64Строка(Данные);
   Строка64=Прав(Строка64,СтрДлина(Строка64)-4);
   ДанныеНаЗапись=Base64Значение(Строка64);
   ДанныеНаЗапись.Записать("C:\Дятель.txt");
21 H A D G E H O G s
 
26.08.09
13:56
"Если что - то хочется, но нельзя - то немного можно.
Но не со мной!"
© Мой лучший универский друг, Миколо.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан