Проблема кодирования символа фунта (£) при преобразовании таблицы HTML в CSV с использованием JavaScript - PullRequest
2 голосов
/ 17 марта 2020

Я использую символ фунта (£) в заголовке таблицы (th) и экспортирую таблицу в формате CSV, используя javascript. Но в файле CSV отображается символ фунта (£), например " Â ". Я пробовал различные решения, представленные в SO потоках. Но никто из них не работал для меня. Как я могу решить эту проблему?

Ниже приведен код таблицы:

<thead> 
     <tr> 
      <th>Property Name</th > 
      <th>Description</th > 
      <th>Category</th> 
      <th>Sub category</th> 
      <th>Amount</th>
      <th>Unit</th> 
      <th> £ / Unit</th> 
      <th>Sub Total</th>

     </tr>
    </thead

Я использую приведенную ниже функцию JavaScript для экспорта таблица в CSV.

function exportTableToCSV(filename,userName) {
    var csv = [];
    var rows = document.querySelectorAll("table#"+userName+" tr");
    for (var i = 0; i < rows.length; i++) {

        var row = [], cols = rows[i].querySelectorAll("td, th");

        for (var j = 0; j < cols.length; j++) 
            row.push(cols[j].innerText);
        csv.push(row.join(","));        
    }

    downloadCSV(csv.join("\n"), filename);
}

function downloadCSV(csv, filename) {
    var csvFile;
    var downloadLink;
    csvFile = new Blob([csv], {type: "text/csv"});
    downloadLink = document.createElement("a");
    downloadLink.download = filename;
    downloadLink.href = window.URL.createObjectURL(csvFile);  
    downloadLink.style.display = "none";
    document.body.appendChild(downloadLink);
    downloadLink.click();
}

Вывод похож на тот, что на скриншоте ниже.

enter image description here

1 Ответ

1 голос
/ 17 марта 2020

Можете ли вы заменить js и проверить.

function exportTableToCSV(filename, userName) {
  var csv = [];
  var rows = document.querySelectorAll("table#" + userName + " tr");
  for (var i = 0; i < rows.length; i++) {

    var row = [],
      cols = rows[i].querySelectorAll("td, th");

    for (var j = 0; j < cols.length; j++)
      row.push(cols[j].innerText);
    csv.push(row.join(","));
  }

  downloadCSV(csv.join("\n"), filename);
}

function downloadCSV(csv, filename) {
  var csvFile;
  var downloadLink;
  var csvString = csv;
  var universalBOM = "\uFEFF";
  var a = window.document.createElement('a');
  a.setAttribute('href', 'data:text/csv; charset=utf-8,' + encodeURIComponent(universalBOM + csvString));
  a.setAttribute('download', filename);
  window.document.body.appendChild(a);
  a.click();

}

exportTableToCSV('test.csv', 'velu');
<table id="velu">
  <thead>
    <tr>
      <th>Property Name</th>
      <th>Description</th>
      <th>Category</th>
      <th>Sub category</th>
      <th>Amount</th>
      <th>Unit</th>
      <th> £ / Unit</th>
      <th>Sub Total</th>

    </tr>
  </thead>
</table>
...