Угловая загрузка файла перерывов UTF-8 BOM - PullRequest
0 голосов
/ 23 апреля 2019

Я создал скрипт на PHP, который используется для генерации CSV-файла с кодировкой спецификации UTF-8, и он прекрасно работает, когда я скачиваю файл через URL, например: www.example.com/generateCSV

PHP-код:

   $file = tempnam(sys_get_temp_dir(), 'mycsv');
   $df = fopen($file, 'w');
   fprintf($df, chr(0xEF).chr(0xBB).chr(0xBF));
   fputcsv($df, ['sd123123123čęėąėąčę', 'ąčęąčęąęąčę'], ';');
   fclose($df);

   header('Content-Type: text/csv; charset=utf-8');
   header('Content-Disposition: attachment; filename=csv.csv');
   header("Cache-Control: no-store, no-cache");
   readfile($file);

Однако, когда я загружаю файл с angular, у меня возникает проблема с кодировкой.Символы больше не распознаются как действительные UTF-8, и они ломаются.Для загрузки файла CSV я использую этот угловой код:

t.prototype.downloadCsv = function () {
      var t = this, e = {
        date_from: this.helpers.formatDate(this.filter.date_from),
        date_to: this.helpers.formatDate(this.filter.date_to),
        download: "fees"
      };
      this.http.get("team-accounts/" + this.route.snapshot.params.id, e).subscribe(function (n) {
        var i = {type: "text/csv;charset=utf-8;"},
          r = t.account.team.name + "_summary_" + e.date_from + "_" + e.date_to + ".csv";
        t.helpers.downloadFile(n._body, i, r)
      })
    }

Кто-нибудь видит, в чем может быть проблема?Почему загрузка страницы по прямой ссылке работает нормально, но потом я загружаю ее через угловой, он перестает правильно отображать символы?

Функция downloadFile:

t.prototype.downloadFile = function (t, e, n, i) {
      var r = new Blob([t], e);
      if (navigator.msSaveBlob) navigator.msSaveBlob(r, n); else {
        var a = document.createElement("a");
        if (void 0 !== a.download) {
          var o = i || document.body, s = URL.createObjectURL(r);
          a.setAttribute("href", s), a.setAttribute("download", n), a.style.visibility = "hidden", o.appendChild(a), a.click(), o.removeChild(a)
        }
      }
    }
...