Скачать текст в измененной кодировке
Есть текст на странице
Хочу его скачать подобным способом
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, время: 15:09. |