Скачать текст в измененной кодировке
Есть текст на странице
Хочу его скачать подобным способом 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 все равно остаются непонятные символы Как правильно перекодировать текст? |
Вот пример файла с нужной кодировкой
VS Code декодирует его с кодировкой Cyrillic (Windows 1251) Без декодирования VS Code отображает этот файл так: �������� ���� После действия Reopen with encoding: Cyrillic (Windows-1251) отображается нормально: Тестовый файл |
data:text/plain;cp1251, |
Нашел рабочий пример со словом привет
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 ИМЕННО ТАКАЯ, КАК НАПИСАНО, С ТАКИМ ЖЕ ПЕРЕНОСОМ И Т.П. Тема закрыта) |
Цитата:
|
Часовой пояс GMT +3, время: 12:38. |