Proponowane rozwiązanie nie działa ze wszystkimi przeglądarkami, ale znalazłem sposób, aby uzyskać to działa we wszystkich przeglądarkach (Chrome, Firefox, IE11, a nawet Edge ... nie wiem o IE9- 10, ponieważ nie mam już do nich dostępu).
Muszę użyć zewnętrznej biblioteki do kodowania encoding.js i działa niesamowicie dobrze z Unicode (widzę moje emoji jednorożca w moim eksporcie CSV w Excelu).
Więc oto kod
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);
}
i to, że działa w IE/Edge/Chrome/Firefox
To może być Byte Order Mark. Czy ten link pomaga? http://stackoverflow.com/questions/155097/microsoft-excel-mangles-diacritics-in-csv-files –
Tak, tak, tak! dodanie działającego prefiksu BOM! –