Много вопросов было уже типа: "открываю файл с помощью <input type="file"/>
и FileReader
, а там значки ����� вместо русских букв"
Решение такого понятно:
var reader = new FileReader();
reader.readAsText(file, 'CP1251');
А КАК СДЕЛАТЬ НАОБОРОТ?
То есть
Есть текст на странице
Скачиваю его с помощью ссылки href="data:text/plain;charset:CP1251,ТЕКСТ_ДЛЯ_СКАЧИВАНИЯ"
Вот как нужно этот текст закодировать, чтобы он скачивался, а потом при его открытии бы "возникали значки ����� вместо русских букв"?
Ну и чтобы, естественно, его можно было бы декодировать потом нормально
Пример нужного скачиваемого файла с нужной кодировкой: файл
Пробовал делать так, используя эту библиотеку: windows-1251
var text = 'ТЕКСТ_ДЛЯ_СКАЧИВАНИЯ';
a.setAttribute("href", "data:text/plain;charset:CP1251," + windows1251.encode(text));
- Не помогло
Нашел рабочий пример со словом привет
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);
if (h=='a'){
h = '0A';
}
return '%' + h;
}
var res = '';
for (var i = 0; i < string.length; i++) {
res += encodeChar(string.charAt(i)) //ну или string[i]
}
return res;
}
Переменная cp1251
ИМЕННО ТАКАЯ, КАК НАПИСАНО, С ТАКИМ ЖЕ ПЕРЕНОСОМ И Т.П.
Овнокодно, но работает)
var a = document.createElement("a");
a.setAttribute("href", "data:text/plain;charset=CP1251," + encodeCP1251('НУЖНЫЙ РУССКИЙ ТЕКСТ'));
a.setAttribute("download", "Test.txt");
a.click();
Тема закрыта)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
При нажатии на <div name="show_details_by_order" открывается <div id="order_body_ и стает доступно нажать на <a name="show_extended_details", но при нажатии на нее срабатывает...
Изучаю тему позиционирования элементов, застрял на позиции stickyПо задуму шапка сайта должна прилипнуть при скроле
Есть несколько страниц vue с одинаковыми классами стилейРешил перенести стили в один файл и подключать к каждой странице отдельно