使用JavaScript将CSV导出为UTF-8

时间:2019-05-22 10:04:55

标签: javascript angular csv encoding

我有一个角度应用程序,用户可以在其中将表格导出为CSV。尽管它在台式机上运行良好,但是当尝试在移动设备上打开它时,出现以下错误: “无法打开文档电子表格似乎已损坏”。 我用这个网站 documentation 检查CSV,并收到以下警告:

”上下文问题:编码不正确 您的CSV似乎以ASCII-8BIT编码。我们建议您使用UTF-8。“

在稍微寻找解决方案之后,我发现了很多问题,但是我的代码似乎已经有了解决方案(BOM),所以我不知道还有什么遗漏。 这是我的代码(这是一个有角度的应用程序)

  protected exportCSV(items: any, fileName: string): void {
    const isItemsExists = Array.isArray(items) && items.length > 0;
    if (!isItemsExists) {
      this.alertService.showTranslatedMessage('dataExporterService.errors.noItemToExport', '', MessageSeverity.error);
      return;
    }

    const replacer = (key, value) => value === null ? '' : value; // specify how you want to handle null values here
    const header = Object.keys(items[0]);
    const csv = items.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join(','));
    csv.unshift(header.join(','));
    const csvArray = csv.join('\r\n');
    const BOM = '\uFEFF'; // Use this and utf8 to support hebrew
    const blob = new Blob([BOM + csvArray], {
      type: 'data:text/csv;charset=utf-8'
    });

    this.fileSaver.save(blob, fileName);
  }

0 个答案:

没有答案