Предлагаемое решение не работает со всеми браузерами, но я нашел способ, чтобы заставить его работать во всех браузерах (Chrome, Firefox, IE11 и даже Edge, ... не знаю, о IE9- 10, так как у меня больше нет доступа к ним).
Мне нужно использовать внешнюю библиотеку для кодирования encoding.js, и она отлично работает с юникодом (я могу видеть мой единорог emoji в моем CSV-экспорте в Excel).
Так вот код
data = new TextEncoder('utf-16be').encode(csvContent);
// create a Blob object for the download
const blob = new Blob(['\uFEFF', data], {
type: 'text/csv;charset=utf-8';
});
// when using IE/Edge, then use different download call
if (typeof navigator.msSaveOrOpenBlob === 'function') {
navigator.msSaveOrOpenBlob(blob, filename);
} else {
// this trick will generate a temp <a /> tag that you can trigger a hidden click for it to start downloading
const link = document.createElement('a');
const csvUrl = URL.createObjectURL(blob);
link.textContent = 'download';
link.href = csvUrl;
link.setAttribute('download', filename);
// set the visibility hidden so there is no effect on your web-layout
link.style.visibility = 'hidden';
// this part will append the anchor tag and remove it after automatic click
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
и это, он работает в IE/Edge/Chrome/Firefox
Это может быть Byte Order Mark. Помогает ли эта ссылка? http://stackoverflow.com/questions/155097/microsoft-excel-mangles-diacritics-in-csv-files –
Да да да! добавление префикса спецификации работало! –