Задать вопрос
  • Как декодировать escape строку?

    @Aves
    Вообще, конечно, странно, что браузеры, способные отобразить страницу в большинстве кодировок, в том числе и data:text/plain;charset=cp1251,%EF%F0%E8%E2%E5%F2 не дают использовать свои возможности в javascript. У FileReader есть метод readAsText, принимающий в качестве второго параметра кодировку, но каким должен быть читаемый Blob, я так и не разобрался.

    Если нет желания использовать библиотеки, можно раскодировать в лоб
    var cp1251 = 'ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·\
    ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя';
    var str = '%EF%F0%E8%E2%E5%F2'.replace(/%(..)/g, function(s, p) {
        p = parseInt(p, 16);
        return p < 128 ? String.fromCharCode(p) : cp1251[p - 128];
    });
    Ответ написан
    2 комментария
  • Сохранение фала csv в windows-1251, javascript?

    @maranqz Автор вопроса
    Kano, Спасибо за первую ссылку.
    Надо просто "некий текст", который я кладу в файл перевести в ссылку с кодировкой windows-1251.
    Я взял за основу https://github.com/mathiasbynens/windows-1251 и дописал.
    var encodeURL = function(input) {
            var length = input.length;
            var index = -1;
            var codePoint;
            var pointer;
            var result = '';
            while (++index < length) {
                codePoint = input.charCodeAt(index);
                // “If `code point` is in the range U+0000 to U+007F, return a byte whose
                // value is `code point`.”
                if (codePoint >= 0x00 && codePoint <= 0x7F) {
                    result += '%' + (codePoint<16?'0':'') + codePoint.toString(16);
                    continue;
                }
                // “Let `pointer` be the index pointer for `code point` in index
                // `single-byte`.”
                if (hasOwnProperty.call(INDEX_BY_CODE_POINT, codePoint)) {
                    pointer = INDEX_BY_CODE_POINT[codePoint];
                    // “Return a byte whose value is `pointer + 0x80`.”
                    result += '%' + (codePoint<16?'0':'') + (pointer + 0x80).toString(16);
                } else {
                    // “If `pointer` is `null`, return `error` with `code point`.”
                    result += error(codePoint, mode);
                }
            }
            return result.toUpperCase();
        };

    Или вот еще более полное решение по кодировки. text-encoding
    Ответ написан
    3 комментария