Показать сообщение отдельно
  #4 (permalink)  
Старый 27.08.2019, 21:47
Интересующийся
Отправить личное сообщение для grigandal Посмотреть профиль Найти все сообщения от grigandal
 
Регистрация: 18.02.2018
Сообщений: 26

Нашел рабочий пример со словом привет

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 ИМЕННО ТАКАЯ, КАК НАПИСАНО, С ТАКИМ ЖЕ ПЕРЕНОСОМ И Т.П.

Тема закрыта)
Ответить с цитированием