Задача: открыть файл в кодировке UTF-8 и найти в нем требуемое слово.
Предыстория: оказывается, объект FileSystemObject не поддерживает вышеназванную кодировку в принципе.
Еще одно интересное открытие: текстовые строки, даже хранящиеся в скрипте в кодировке 1251, в памяти при выполнении хранятся в unicode!
Выполняя
var s="Мотя";
WScript.echo(escape(s));
получим "%u041C%u043E%u0442%u044F"
А
вот такие скрипты, найденные в сети, работают с кириллицей криво.
пришлось мастерить побуквенный транскодер. Вот что получилось:
function transcode(s){
var d="";
d=escape(s);
d=d.replace(/%u0420/g,"%u0420%A0"); //Р в первую очередь!
d=d.replace(/%u0421/g,"%u0420%u040E"); //С тоже!
d=d.replace(/%u0401/g,"%u0420%u0403"); // Ё
d=d.replace(/%u0410/g,"%u0420%u0452"); //А
d=d.replace(/%u0411/g,"%u0420%u2018"); //Б
d=d.replace(/%u0412/g,"%u0420%u2019"); //В
d=d.replace(/%u0413/g,"%u0420%u201C"); //Г
d=d.replace(/%u0414/g,"%u0420%u201D"); //Д
d=d.replace(/%u0415/g,"%u0420%u2022"); //Е
d=d.replace(/%u0416/g,"%u0420%u2013"); //Ж
d=d.replace(/%u0417/g,"%u0420%u2014"); //З
d=d.replace(/%u0418/g,"%u0420%98"); //И
d=d.replace(/%u0419/g,"%u0420%u2122"); //Й
d=d.replace(/%u041A/g,"%u0420%u0459"); //К
d=d.replace(/%u041B/g,"%u0420%u203A"); //Л
d=d.replace(/%u041C/g,"%u0420%u045A"); //М
d=d.replace(/%u041D/g,"%u0420%u045C"); //Н
d=d.replace(/%u041E/g,"%u0420%u045B"); //О
d=d.replace(/%u041F/g,"%u0420%u045F"); //П
d=d.replace(/%u0422/g,"%u0420%u045E"); //Т
d=d.replace(/%u0423/g,"%u0420%u0408"); //У
d=d.replace(/%u0424/g,"%u0420%A4"); //Ф
d=d.replace(/%u0425/g,"%u0420%u0490"); //Х
d=d.replace(/%u0426/g,"%u0420%A6"); //Ц
d=d.replace(/%u0427/g,"%u0420%A7"); //Ч
d=d.replace(/%u0428/g,"%u0420%u0401"); //Ш
d=d.replace(/%u0429/g,"%u0420%A9"); //Щ
d=d.replace(/%u042A/g,"%u0420%u0404"); //Ъ
d=d.replace(/%u042B/g,"%u0420%AB"); //Ы
d=d.replace(/%u042C/g,"%u0420%AC"); //Ъ
d=d.replace(/%u042D/g,"%u0420%AD"); //Э
d=d.replace(/%u042E/g,"%u0420%AE"); //Ю
d=d.replace(/%u042F/g,"%u0420%u0407"); //Я
d=d.replace(/%u0430/g,"%u0420%B0"); // а
d=d.replace(/%u0431/g,"%u0420%B1"); // б
d=d.replace(/%u0432/g,"%u0420%u0406"); // в
d=d.replace(/%u0433/g,"%u0420%u0456"); // г
d=d.replace(/%u0434/g,"%u0420%u0491"); // д
d=d.replace(/%u0435/g,"%u0420%B5"); // е
d=d.replace(/%u0436/g,"%u0420%B6"); // ж
d=d.replace(/%u0437/g,"%u0420%B7"); // з
d=d.replace(/%u0437/g,"%u0420%u0451"); // и
d=d.replace(/%u0439/g,"%u0420%u2116"); // й
d=d.replace(/%u043A/g,"%u0420%u0454"); // к
d=d.replace(/%u043B/g,"%u0420%BB"); // л
d=d.replace(/%u043C/g,"%u0420%u0458"); // м
d=d.replace(/%u043D/g,"%u0420%u0405"); // н
d=d.replace(/%u043E/g,"%u0420%u0455"); // о
d=d.replace(/%u043F/g,"%u0420%u0457"); // п
d=d.replace(/%u0440/g,"%u0421%u0402"); // р
d=d.replace(/%u0441/g,"%u0421%u0403"); // с
d=d.replace(/%u0442/g,"%u0421%u201A"); // т
d=d.replace(/%u0443/g,"%u0421%u0453"); // у
d=d.replace(/%u0444/g,"%u0421%u201E"); // ф
d=d.replace(/%u0445/g,"%u0421%u2026"); // х
d=d.replace(/%u0446/g,"%u0421%u2020"); // ц
d=d.replace(/%u0447/g,"%u0421%u2021"); // ч
d=d.replace(/%u0448/g,"%u0421%u20AC"); // ш
d=d.replace(/%u0449/g,"%u0421%u2030"); // щ
d=d.replace(/%u044A/g,"%u0421%u0409"); // ъ
d=d.replace(/%u044B/g,"%u0421%u2039"); // ы
d=d.replace(/%u044C/g,"%u0421%u040A"); // ь
d=d.replace(/%u044D/g,"%u0421%u040C"); // э
d=d.replace(/%u044E/g,"%u0421%u040B"); // ю
d=d.replace(/%u044F/g,"%u0421%u040F"); // я
d=d.replace(/%u0451/g,"%u0421%u2018"); // ё
return d;
}
Работает оно так:
var s="Мотя";
WScript.echo("unescaped s:",unescape(transcode(s)));
Если кто-нибудь предложит более изящное решение, буду благодарен!