1

Тема: WSH: пример конвертации текста из кодировки в кодировку

Простейший пример работы с кодировками с помощью ADODB.Stream. Пример преобразует файл C:\Temp\test.txt из UTF-8 в windows-1251:

Set ADODBStream = CreateObject("ADODB.Stream")
ADODBStream.Type = 2
ADODBStream.Charset = "UTF-8"
ADODBStream.Open()
ADODBStream.LoadFromFile("C:\Temp\test.txt")
Text = ADODBStream.ReadText()
ADODBStream.Close()
ADODBStream.Charset = "windows-1251"
ADODBStream.Open()
ADODBStream.WriteText(Text)
ADODBStream.SaveToFile "C:\Temp\test.txt", 2
ADODBStream.Close()
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2 (изменено: Xameleon, 2007-12-28 13:15:35)

Re: WSH: пример конвертации текста из кодировки в кодировку

А это на случай конвертации текста в переменной

MsgBox StrConv("бНОПНЯ","KOI8-R","Windows-1251")

Function StrConv(Text,SourceCharset,DestCharset)
    Set Stream = CreateObject("ADODB.Stream")
    Stream.Type = 2
    Stream.Mode = 3
    Stream.Open
    Stream.Charset = SourceCharset
    Stream.WriteText Text
    Stream.Position = 0
    Stream.Charset = DestCharset
    StrConv = Stream.ReadText
End Function
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3

Re: WSH: пример конвертации текста из кодировки в кодировку

Доступные варианты кодировок на компьютере для использования в вышеприведённых скриптах находятся в реестре по адресу HKEY_CLASSES_ROOT\MIME\Database\Charset.

4

Re: WSH: пример конвертации текста из кодировки в кодировку

Функция перевода текста OEM-866 в Win-1251.

Function D2W(DOS_STRING)
'DOS:
'128(А)-175(п)
'224(р)-239(я)
'240(Ё),241(ё)
'WIN:
'192(А)-255(я)
'184(ё),168(Ё)

If Len(DOS_STRING)=0 Then Exit Function
For i=1 To Len(DOS_STRING)
    s=Asc(Mid(DOS_STRING,i,1))
    If s>=128 And s<=175 Then
       D2W = D2W & Chr(s + 64)
    ElseIf s>=224 And s<=239 Then
       D2W = D2W & Chr(s + 16)
    ElseIf s=240 Then
       D2W = D2W & Chr(168)
    ElseIf s=241 Then
       D2W = D2W & Chr(184)
    Else
       D2W = D2W & Chr(s)
    End If

Next
End Function

Прислал ingvar68.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

5 (изменено: jite, 2011-06-13 01:02:46)

Re: WSH: пример конвертации текста из кодировки в кодировку

JScript. Преобразование кодировки текста в UTF-8


/** Возвращает текст sText преобразованный из кодировки sSrcCharset (по ум. windows-1251) в UTF-8
 * Обязателен только 1-й параметр 
 */
function sToUTF8(sText, bWithBOM, sSrcCharset) {
  if (!sSrcCharset) sSrcCharset = "windows-1251"; //Для ADODB.Stream default - Unicode. Еще можно KOI8-R, cp866
  sText += "";
  with (new ActiveXObject("ADODB.Stream")) { //http://www.w3schools.com/ado/ado_ref_stream.asp
    type = 2; //Binary 1, Text 2 (default) 
    mode = 3; //Permissions have not been set 0,  Read-only 1,  Write-only 2,  Read-write 3,  
    //Prevent other read 4,  Prevent other write 8,  Prevent other open 12,  Allow others all 16
    charset = "utf-8";
    open();
    writeText(sText);
    position = 0;
    charset = sSrcCharset;
    var nPos = bWithBOM ? 0 : 3;
    return readText().substr(nPos);
  }
}

6

Re: WSH: пример конвертации текста из кодировки в кодировку

JScript. Преобразование кодировок cp866 (DOS) и windows-1251

/** Возвращает текст sText преобразованный из кодировки cp866 (DOS) в windows-1251. 
 * Или наоборот - из 1251 в DOS - если флаг bInsideOut равен true.
 */
function sDOS2Win(sText, bInsideOut) {
  var aCharsets = ["windows-1251", "cp866"];
  sText += "";
  bInsideOut = bInsideOut ? 1 : 0;
  with (new ActiveXObject("ADODB.Stream")) { //http://www.w3schools.com/ado/ado_ref_stream.asp
    type = 2; //Binary 1, Text 2 (default) 
    mode = 3; //Permissions have not been set 0,  Read-only 1,  Write-only 2,  Read-write 3,  
    //Prevent other read 4,  Prevent other write 8,  Prevent other open 12,  Allow others all 16
    charset = aCharsets[bInsideOut];
    open();
    writeText(sText);
    position = 0;
    charset = aCharsets[1 - bInsideOut];
    return readText();
  }
}