Имя: Пароль:
1C
 
ADODB.Stream -> Операция не допускается, если объект закрыт
,
0 DigitalDolphin
 
25.08.23
15:09
Нужно перегнать файл ANSI в UTF8. Написал тестовый файл JS для проверки. Ошибка при запуске в строке 8: Операция не допускается, если объект закрыт. Че может это быть?


1  function FileInUTF8() {
2    Stream = new ActiveXObject('ADODB.Stream');
3    Stream.Charset= 'utf-8';
4    Stream.Type = 2;
5    Stream.Mode = 3;
6
7    WScript.Echo("  -> LoadFromFile");
8    Stream.LoadFromFile(PathLoad);
9
10   WScript.Echo("  -> PathUTF8");
11   Stream.SaveToFile(PathUTF8, 2);
12   return 'ok';
13 }
14
15 WScript.Echo("Start...");
16 var PathLoad = "D:\\S2023-07-22.txt";
17 var PathUTF8 = "D:\\utf8_S2023-07-22.txt";
18 FileInUTF8();
19 WScript.Echo("...End");
1 Garykom
 
гуру
25.08.23
15:18
1С 7.7?
2 Кирпич
 
25.08.23
16:10
Stream.Open
3 DigitalDolphin
 
25.08.23
16:24
(2) Спасибо помогло
4 DigitalDolphin
 
25.08.23
16:27
Да проблему ошибки решило. Но саму перекодировку не делает. Просто отображает в новом файле глухими символами. А есть возможность перекодировать метод тут?
5 Garykom
 
гуру
25.08.23
16:40
6 Кирпич
 
25.08.23
16:42
Создай Stream2. запиши в него свой Stream. Stream2 запиши на диск.
7 H A D G E H O G s
 
25.08.23
16:51
PathLoad="e:\tmp\ansi.txt";
    PathUTF8="e:\tmp\utf8.txt";
    inStream = Новый COMОбъект("ADODB.Stream");
    inStream.Charset= "windows-1251";
    inStream.Type = 2;
    inStream.Mode = 3;
    inStream.Open();
    inStream.LoadFromFile(PathLoad);
    outStream=Новый COMОбъект("ADODB.Stream");
    outStream.Type = 2;
    outStream.Mode = 3;
    outStream.Open();
    outStream.Charset= "utf-8";
    outStream.writeText(inStream.readText());
    outStream.SaveToFile(PathUTF8, 2);
    outStream.close();
    inStream.close();
8 DigitalDolphin
 
25.08.23
16:59
(7) Спасибо. Да уже тоже на других ветках Мисто нашел это решение. СПАСИБО.
9 Кирпич
 
25.08.23
16:59

function FileInUTF8(file_from, file_to) {
  Stream = new ActiveXObject('ADODB.Stream');
  Stream.Charset= 'windows-1251';
  Stream.Type = 2;
  Stream.Mode = 3;

  Stream2 = new ActiveXObject('ADODB.Stream');
  Stream2.Charset= 'utf-8';
  Stream2.Type = 2;
  Stream2.Mode = 3;

  Stream.Open();
  Stream2.Open();
  Stream.LoadFromFile(file_from);
  Stream.CopyTo(Stream2);
  Stream2.SaveToFile(file_to, 2);
}

FileInUTF8("file1.txt", "file2.txt")
10 Garykom
 
гуру
25.08.23
17:04
перепись динозавриков...
11 DigitalDolphin
 
25.08.23
18:46
(9) Интересно, оказывается можно еще и просто стрим скопировать методом .CopyTo(). Отлично! Я решил первым через readText().
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.