Смена кодировки файла VBScript

Наверное многие сталкивались с проблемой смены кодировки в файле посредством Windows. В данной статье я расскажу как можно сменить кодировку посредством VBScript.

Из всех рассмотренных вариантов я решил остановиться на создании объекта ADODB.Stream. Поставим себе задачу преобразовать файл кодировки ANSI в UTF-8. Суть нашего способа будет такова:

  1. создаем объект ADODB.Stream с параметрами исходной кодировки
  2. открываем исходный файл
  3. считываем в переменную весь файл
  4. меняем параметры ADODB.Stream
  5. записываем содержимое файла

Для начала создадим объект ADODB.Stream.

Set str= CreateObject("ADODB.Stream")

Установим необходимые параметры, откроем и прочитаем файл.

str.Type = 2
str.Charset = "windows-1251"
str.Open()
str.LoadFromFile("C:\ANSI.txt")
Text = ADODBStream.ReadText()
str.Close()

str.Type = 2 говорит о том, что будет текстовый тип данных. Для справки, если бы мы установили str.Type равным единице, то объект бы считал, что будет бинарный тип данных. В официальной документации написано, что по умолчанию используется текстовый тип, т.е. Type = 2.

str.Charset = «windows-1251» указывает на кодировку. По умолчанию используется кодировка «Unicode».

Text = ADODBStream.ReadText()  считывает текстовый файл целиком из объекта. Данные должны быть обязательно текстовыми, для считывания бинарных данных используется другой метод. Также это метод имеет параметры

  • ReadText(-1) — считывание файла целиком, является параметром по-умолчанию
  • ReadText(-2) — построчное считывание файла

str.Close() закрывает объект ADODB.Stream, но не удаляет его из памяти, следовательно его можно будет заново открыть с другими параметрами.

str.Charset = "UTF-8"
str.Open()
str.WriteText(Text)
str.SaveToFile "C:\UTF-8.txt", 2
str.Close()

str.WriteText(Text) записывает текст в объект, для записи бинарных данных используется другой метод. Также вторым параметром может быть указано, добавлять ли разделитель строки.

str.SaveToFile «C:\UTF-8.txt», 2 записывает файл по указанному пути. Второй параметр может принимать значения:

  • 1 создает файл, если он еще не существует, является значение по умолчанию.
  • 2 перезаписывает данные в имеющемся файле

Вот и все, весь получившийся код ниже.

Set str= CreateObject("ADODB.Stream")
str.Type = 2
str.Charset = "windows-1251"
str.Open()
str.LoadFromFile("C:\ANSI.txt")
Text = ADODBStream.ReadText()
str.Close()
str.Charset = "UTF-8"
str.Open()
str.WriteText(Text)
str.SaveToFile "C:\UTF-8.txt", 2
str.Close()
comments powered by HyperComments
alexlbz
2016-05-31 12:13:04
Коротко и понятно)) Спасибо. Надо бы строку 6 полного кода заменить на Text = str.ReadText() Ⓜ
При копировании материалов обратная ссылка на play-stop.ru желательна обязательна!