Дабы закрыть гештальт добавлю решение которое нашлось методом проб и ошибок. Может кому-то поможет избежать излишней траты времени на поиски как мне.
Итак, итоговый код из того самого проекта:
if (isIE) {
var strResult = new TextEncoder('windows-1251', { NONSTANDARD_allowLegacyEncoding: true }).encode(txtData);
safeSave('demirPayments.txt', strResult);
} else {
const encodedDataURL = windows1251.encodeURL(txtData);
$('#LinkOnFile').attr('href', 'data:text/plain;charset=windows-1251,' + encodedDataURL);
$('#LinkOnFile').find('span').trigger('click');
};
Т.е. используется 2 разных метода для IE и для прочих платформ. Для IE после конвертации строки в нужную нам кодировку через TextEncoder используем следующую процедуру для сохранения файла, где пакуем файл как бинарные данные функцией saveAs из библиотеки FileSaver.js:
function safeSave(name, Data, PathLength) {//Data as array
// !Elem:LoadSaveDi
var safeSaveLoad = 0;
if (!PathLength) { PathLength = 100000; }
var buffer = new ArrayBuffer(Data.length)
, temp = new DataView(buffer)
, n32 = Math.floor(Data.length / 4)
, n16 = Math.floor((Data.length - n32 * 4) / 2)
, n8 = Data.length - n32 * 4 - n16 * 2
, Kkey = 0, K = -1
, APath = splitPath(n32, PathLength)
;
if (APath == '') { APath = [0] }
var RunSasa = setInterval(function () {
if (Kkey == 0) { Kkey = 1; K += 1; }
for (var i = 0; i < APath[K]; i++) {
temp.setUint32((i + K * PathLength) * 4, Data[(i + K * PathLength) * 4] * Math.pow(256, 3) + Data[(i + K * PathLength) * 4 + 1] * Math.pow(256, 2) + Data[(i + K * PathLength) * 4 + 2] * 256 + Data[(i + K * PathLength) * 4 + 3]);
}
Kkey = 0;
safeSaveLoad = Math.round(1000 * (K + 1) / APath.length) / 1000;
if (K + 1 == APath.length) {
clearInterval(RunSasa);
if (n16 != 0) { temp.setUint16(n32 * 4, Data[n32 * 4] * 256 + Data[n32 * 4 + 1]); }
if (n8 != 0) { temp.setUint8(n32 * 4 + n16 * 2, Data[n32 * 4 + n16 * 2]); }
saveAs(new Blob([buffer], { type: "binary" }), name);
}
}, 10);
}
Прочие браузеры работать по этой схеме отказались, как впрочем и по другим более менее тривиальным (список перепробованного не приведу, т.к. было это давно и возможно, что сейчас часть из них сработает на новых версиях браузерных движков).
Однако тогда пришлось имитировать ссылку и клик по ней:
$('#LinkOnFile').attr('href', 'data:text/plain;charset=windows-1251,' + encodedDataURL);
$('#LinkOnFile').find('span').trigger('click');
Только так удалось получить нужный формат файла.