mannaro
@mannaro
Умею профессионально гуглить

Как победить кодировки под NodeJS?

Вечер добрый! Генерирую я на сервере файл с русскоязычным именем и кодировкой windows-1251. Нужно это для корректой обработки csv файла excel'ем.
var name = iconv.encode(poll.name, 'win1251');
    res.setHeader('Content-Disposition', `attachment; filename="${name}.csv"`);
    res.setHeader('Content-Type', 'text/csv; charset=windows-1251');
    var str = "sep=,\r\n\"" + poll.name + "\"\r\n\r\n" + json2csv(answers, true, true);
    res.end(iconv.encode(str, 'win1251'));

Но при скачивании получаю файл "ээээээ.csv". Как побороть сие чудо?
  • Вопрос задан
  • 2736 просмотров
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Кодировка имени файла в HTTP-заголовках не зависит от кодировки содержания файла. И вообще это отдельное минное поле с миллионом багов. Почитайте greenbytes.de/tech/tc2231, там много интересного.

В общем случае для более-менее современных браузеров стоит выбрать вариант с кодированием в UTF-8 greenbytes.de/tech/tc2231/#attwithfn2231utf8. Для надёжности стоит продублировать имя файла в HTML-атрибуте download у ссылки на скачивание. В нём нет проблем с кодировками и его поддерживают Firefox, Chrome (и всё на нём), планируется поддержка в Edge. В общем, хуже он не сделает.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы