Нашел рабочий пример со словом привет
var a = document.createElement("a");
a.setAttribute("href", "data:text/plain;charset=cp1251,%EF%F0%E8%E2%E5%F2");
a.setAttribute("download", "Test.txt");
a.click();
И функцию, которая это слово декодирует
function decodeCP1251(string){
function decodeChar(s, p) {
var cp1251 = 'ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬*®Ї°±Ііґµ¶·\
ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя';
p = parseInt(p, 16);
return p < 128 ? String.fromCharCode(p) : cp1251[p - 128];
}
var str = string;
return str.replace(/%(..)/g,decodeChar);
}
Ну и судя по ней, кодирующая функция может выглядеть вот так
var encodeCP1251 = function (string) {
function encodeChar(c) {
var isKyr = function (str) {
return /[а-я]/i.test(str);
}
var cp1251 = 'ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬*®Ї°±Ііґµ¶·\
ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя';
var p = isKyr(c) ? (cp1251.indexOf(c) + 128) : c.charCodeAt(0);
var h = p.toString(16);
return '%' + h;
}
var res = '';
for (var i = 0; i < string.length; i++) {
res += encodeChar(string.charAt(i)) //ну или string[i]
}
return res;
}
Овнокодно, но работает)
var a = document.createElement("a");
a.setAttribute("href", "data:text/plain;charset=CP1251," + encodeCP1251('НУЖНЫЙ РУССКИЙ ТЕКСТ'));
a.setAttribute("download", "Test.txt");
a.click();
Переменная
cp1251 ИМЕННО ТАКАЯ, КАК НАПИСАНО, С ТАКИМ ЖЕ ПЕРЕНОСОМ И Т.П.
Тема закрыта)