Giải pháp được đề xuất không hoạt động với tất cả trình duyệt, nhưng tôi đã tìm cách làm cho nó hoạt động trong tất cả các trình duyệt (Chrome, Firefox, IE11 và thậm chí Edge, ... không biết về IE9- 10 vì tôi không có quyền truy cập vào chúng nữa).
Tôi phải sử dụng thư viện bên ngoài để mã hóa encoding.js và nó hoạt động đáng kinh ngạc với unicode (Tôi có thể thấy biểu tượng cảm xúc kỳ lân trong xuất CSV của tôi trong Excel).
Vì vậy, đây là mã
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);
}
và đó là nó, nó hoạt động trong IE/Edge/Chrome/Firefox
Nó có thể là Byte Order Mark. Liên kết này có giúp ích không? http://stackoverflow.com/questions/155097/microsoft-excel-mangles-diacritics-in-csv-files –
Có vâng có! thêm tiền tố BOM làm việc! –