Javascript.RU

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

Скачать текст в измененной кодировке
Есть текст на странице

Хочу его скачать подобным способом

var a = document.createElement("a");
    a.setAttribute("href", "data:text/plain," + ('НУЖНЫЙ ТЕКСТ НА РУССКОМ'));
    a.setAttribute("download", "Test.kbs");
    a.click();


Но перед этим мне нужно преобразовать его кодировку в windows-1251

Пробовал использовать эту библиотеку: https://github.com/mathiasbynens/windows-1251

И сделать вот так

var a = document.createElement("a");
    a.setAttribute("href", "data:text/plain," + windows1251.encode('НУЖНЫЙ ТЕКСТ НА РУССКОМ'));
    a.setAttribute("download", "Test.kbs");
    a.click();

Но после того, как открываю скачанное в VS Code или NotePad++ и переоткрываю с учетом кодировки windows-1251 все равно остаются непонятные символы

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

Вот пример файла с нужной кодировкой

VS Code декодирует его с кодировкой Cyrillic (Windows 1251)

Без декодирования VS Code отображает этот файл так: �������� ����

После действия Reopen with encoding: Cyrillic (Windows-1251) отображается нормально: Тестовый файл
Ответить с цитированием
  #3 (permalink)  
Старый 27.08.2019, 18:06
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

data:text/plain;cp1251,
__________________
29375, 35
Ответить с цитированием
  #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 ИМЕННО ТАКАЯ, КАК НАПИСАНО, С ТАКИМ ЖЕ ПЕРЕНОСОМ И Т.П.

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

Сообщение от Aetae Посмотреть сообщение
data:text/plain;cp1251,
Это не сильно поможет, это задает только мета тег, а должна быть закодирована сама строка
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Раскрывающийся список с объемными текстами morzer Общие вопросы Javascript 4 11.07.2016 14:54
проблема со scroll Chrome Элементы интерфейса 2 21.10.2013 14:46
прогкрутка к якорям cOAPerator Общие вопросы Javascript 20 27.08.2013 03:30
Выравнять три дива в одной строке debugx (X)HTML/CSS 9 06.10.2011 12:03