ss='';
for (i=0;i<s.length;i++) { //Цикл по всем символам в строке
if (RusDict.Exists(s.charAt(i))) //Проверяем наличие символа в словаре
//Преобразуем i-й символ в Windows-кодировку
ss+=RusDict.Item(s.charAt(i));
else ss+=s.charAt(i);
}
return ss;
}
Как мы видим, эта функция преобразует переданную в качестве параметра строку следующим образом: все символы кириллицы в этой строке переводятся в Windows-кодировку, остальные символы остаются без изменений. Основным в функций DosToWin
является использование объекта Dictionary
(аналог ассоциативного массива) с именем RusDict
. Этот объект формируется в функции MakeRusDict
и содержит пары 'ключ'–'значение' для всех букв русского алфавита, причем в качестве ключа указывается буква в DOS-кодировке, а в качестве значения — символ с кодом, который соответствует этой букве в Windows-кодировке:
function MakeRusDict() {
//Создаем объект Dictionary
RusDict = WScript.CreateObject('Scripting.Dictionary');
//Заполняем пары 'ключ' (символ в DOS-кодировке)-'значение' (символ в
//Window-кодировке) для всех букв русского алфавита
RusDict.add('Ђ', 'А'); RusDict.add('Ѓ', 'Б'); RusDict.add('‚', 'В');
RusDict.add('ѓ', 'Г'); RusDict.add('„', 'Д'); RusDict.add('…', 'Е');
RusDict.add('р', 'Ё'); RusDict.add('†', 'Ж'); RusDict.add('‡', 'З');
RusDict.add('€', 'И'); RusDict.add('‰', 'Й'); RusDict.add('Љ', 'К');
RusDict.add('‹', 'Л'); RusDict.add('Њ', 'М'); RusDict.add('Ќ', 'Н');
RusDict.add('Ћ', 'О'); RusDict.add('Џ', 'П'); RusDict.add('ђ', 'Р');
RusDict.add('‘', 'С'); RusDict.add('’', 'Т'); RusDict.add('“', 'У');
RusDict.add('”', 'Ф'); RusDict.add('•', 'Х'); RusDict.add('–', 'Ц');
RusDict.add('—', 'Ч'); RusDict.add('?', 'Ш'); RusDict.add('™', 'Щ');
RusDict.add('љ', 'Ъ'); RusDict.add('›', 'Ы'); RusDict.add('њ', 'Ь');
RusDict.add('ќ', 'Э'); RusDict.add('ћ', 'Ю'); RusDict.add('џ', 'Я');
RusDict.add(' ', 'а'); RusDict.add('Ў', 'б'); RusDict.add('ў', 'в');
RusDict.add('Ј', 'г'); RusDict.add('¤', 'д'); RusDict.add('Ґ', 'е');
RusDict.add('с', 'ё'); RusDict.add('¦', 'ж'); RusDict.add('§', 'з');
RusDict.add('Ё', 'и'); RusDict.add('©', 'й'); RusDict.add('Є', 'к');
RusDict.add('«', 'л'); RusDict.add('¬', 'м'); RusDict.add('', 'н');
RusDict.add('®', 'о'); RusDict.add('Ї', 'п'); RusDict.add('а', 'р');
RusDict.add('б', 'с'); RusDict.add('в', 'т'); RusDict.add('г', 'у');
RusDict.add('д', 'ф'); RusDict.add('е', 'х'); RusDict.add('ж', 'ц');
RusDict.add('з', 'ч'); RusDict.add('и', 'ш'); RusDict.add('й', 'щ');
RusDict.add('к', 'ъ'); RusDict.add('л', 'ы'); RusDict.add('м', 'ь');
RusDict.add('н', 'э'); RusDict.add('о', 'ю'); RusDict.add('п', 'я');
}
В функции DosToWin
из VBScript-сценария StdIn1.vbs (листинг 2.15) реализован другой подход к переводу строки в Windows-кодировку, связанный с преобразованием ANSI-кодов символов:
Function DosToWin(s)
Dim i,k,ss
ss=''
For i=1 To Len(s) ' Цикл по всем символам в строке
k = Asc(Mid(s,i,1)) ' Определяем ANSI-код i-го символа
' Изменяем код k на код соответствующего символа в
' Windows-кодировке
If (128 <= k) And (k <= 175) Then
k=k+64
ElseIf (224 <= k) And (k <= 239) Then
k=k+16
ElseIf k = 240 Then
k=168
ElseIf k = 241 Then
k=184
End If
ss=ss+Chr(k) ' Возвращаем преобразованную строку
Next
DosToWin=ss
End Function
Весь алгоритм этой функции состоит в вычислении по ANSI-коду буквы русского алфавита в DOS- кодировке кода символа в Windows-кодировке, соответствующего этой букве.
StdIn.ReadLine
(JScript) /*******************************************************************/
/* Имя: StdIn1.js */
/* Язык: JScript */
/* Описание: Пример использования метода StdIn.ReadLine */
/*******************************************************************/
var s,RusDict; //Объявляем переменные
//Функция для создания объекта Dictionary с парами 'ключ-значение', где
//'ключ'-буква в DOS-кодировке, 'значение'- символ, соответствующий этой
//букве в Windows-кодировке
function MakeRusDict() {
//Создаем объект Dictionary
RusDict = WScript.CreateObject('Scripting.Dictionary');
//Заполняем пары 'ключ' (символ в DOS-кодировке)-'значение' (символ в
//Window-кодировке) для всех букв русского алфавита
RusDict.add('Ђ', 'А'); RusDict.add('Ѓ', 'Б'); RusDict.add('‚', 'В');
RusDict.add('ѓ', 'Г'); RusDict.add('„', 'Д'); RusDict.add('…', 'Е');
RusDict.add('р', 'Ё'); RusDict.add('†', 'Ж'); RusDict.add('‡', 'З');
RusDict.add('€', 'И'); RusDict.add('‰', 'Й'); RusDict.add('Љ', 'К');
RusDict.add('‹', 'Л'); RusDict.add('Њ', 'М'); RusDict.add('Ќ', 'Н');
RusDict.add('Ћ', 'О'); RusDict.add('Џ', 'П'); RusDict.add('ђ', 'Р');
RusDict.add('‘', 'С'); RusDict.add('’', 'Т'); RusDict.add('“', 'У');
RusDict.add('”', 'Ф'); RusDict.add('•', 'Х'); RusDict.add('–', 'Ц');
RusDict.add('—', 'Ч'); RusDict.add('?', 'Ш'); RusDict.add('™', 'Щ');
RusDict.add('љ', 'Ъ'); RusDict.add('›', 'Ы'); RusDict.add('њ', 'Ь');
RusDict.add('ќ', 'Э'); RusDict.add('ћ', 'Ю'); RusDict.add('џ', 'Я');
RusDict.add(' ', 'а'); RusDict.add('Ў', 'б'); RusDict.add('ў', 'в');
RusDict.add('Ј', 'г'); RusDict.add('¤', 'д'); RusDict.add('Ґ', 'е');
RusDict.add('с', 'ё'); RusDict.add('¦', 'ж'); RusDict.add('§', 'з');