Всё же сделал, что хотел. Правда, замену некоторых символов юникодными пришлось побеждать тупой табличной заменой (благо их не так много)
var
t1=new Date(),
t2;
var
c={338:140,339:156,352:138,353:154,376:159,381:142,382:158,402:131,710:136,732:152,
8211:150,8212:151,8216:145,8217:146,8218:130,8220:147,8221:148,8222:132,8224:134,
8225:135,8226:149,8230:133,8240:137,8249:139,8250:155,8364:128,8482:153}, // UTF>ANSI
n='G:\\Case\\BookPages.zip', // [путь\\]имя файла
r=0xFFFFFFFF, // здесь будет результат
s,
t=[]; // здесь будут табличные значения для алгоритма CRC
for(var i=0;i<256;i++){ // вычисляем табличные значения для алгоритма CRC
s=i;
for(var j=0;j<8;j++)s=(s&1)?0xEDB88320^(s>>>1):s>>>1;
t[i]=s;
}
try{ // пытаемся читать файл
with(new ActiveXObject("ADODB.Stream")){
type=2,charset='ISO-8859-1';
open(),loadFromFile(n);
s=readText();
close();
}
}catch(e){
WScript.echo('Не удалось получить файл\n'+n);
WScript.quit();
}
for(var i=0;i<s.length;i++) // собственно, вычисляем контрольную сумму
r=t[(r^(s.charCodeAt(i)<256?s.charCodeAt(i):c[s.charCodeAt(i)]))&0xFF]^(r>>>8);
r=r^0xFFFFFFFF;
if(r<0)r+=4294967296;
t2=new Date();
t1=t2-t1;
WScript.echo(r.toString(16)+'\n'+t1+' mS');