UTF-8 csv encoding

UTF-8 csv encoding

本文关键字:encoding csv UTF-8      更新时间:2023-09-26

我有一个页面,可以作为我正在做的一项研究的认知测试。

JS文件输出一个CSV文件,其中包含详细的测试结果。

一些文本是希伯来语,CSV 在 Excel 中显示乱码。

我尝试了以下方法:

var csvContent = "data:text/csv;charset=utf-8,";

但我得到相同的结果:

׳©׳—׳•׳¨    ׳¡׳’׳•׳ gray
׳©׳—׳•׳¨    ׳™׳¨׳•׳§    yellow
׳©׳—׳•׳¨    ׳׳“׳•׳  pink
׳׳₪׳•׳¨ ׳׳₪׳•׳¨ purple
׳™׳¨׳•׳§    ׳›׳×׳•׳ #FE642E
׳™׳¨׳•׳§    ׳¦׳”׳•׳‘    red
׳׳₪׳•׳¨ ׳©׳—׳•׳¨    pink
׳׳₪׳•׳¨ ׳›׳×׳•׳ gray
׳™׳¨׳•׳§    ׳¦׳”׳•׳‘    purple
׳׳“׳•׳  ׳׳₪׳•׳¨ pink
  • JSFiddle 上的整个代码

我做错了什么?

正如阿拉斯泰尔指出的那样,如果您希望 excel 正常运行,您将希望在文件的开头有一个 BOM。 但我认为应该以不同的方式指定。 下面是如何下载(已编码)在浏览器中构建的csv文件的完整工作示例:

// not needed with firefox, chrome, ie11:
// window.URL = window.URL || window.webkitURL;
var data = "a,column b,c'nНикола Тесла,234,365";
// add UTF-8 BOM to beginning so excel doesn't get confused.
// *THIS IS THE KEY*
var BOM = String.fromCharCode(0xFEFF);
data = BOM + data;
var btn = document.createElement("button");
btn.appendChild(document.createTextNode("Click Me!"));
btn.onclick = function() {
  var blob = new Blob([data], {type:  "text/csv;charset=UTF-8"});
  if (window.navigator && window.navigator.msSaveOrOpenBlob) {
    // ie
    var success = window.navigator.msSaveOrOpenBlob(blob, "Name of File.csv");
    if (!success) {
      alert("Failed");
    }
  } else {
    // not ie
    var a = document.createElement("a");
    a.href = window.URL.createObjectURL(blob);
    a.download = "Name of File.csv";
    document.body.appendChild(a);
    a.click();
    // is there a problem with removing this from the DOM already?
    a.parentNode.removeChild(a);
  }
};
document.body.appendChild(btn);

上述方法适用于当前的Firefox,Chrome和IE11 - 如果您使用excel打开,您将看到塞尔维亚西里尔文的Nicola Tesla的名字。

唯一要做的就是在 csv 字符串的开头添加"''ufeff"

var csv = "'ufeff"+CSV;

同样的答案从这里:相同的答案

我从这里找到了解决方案:类似的问题和解决方案

我把它们放在这里,以防万一你正在寻找解决方案。

Excel

不会自动识别 UTF-8 文档的编码。为此,您需要在文件的最开头添加一个 UTF-8 BOM ("''uefbbbf")。

您还可以在 Excel 中打开之前使用记事本++验证 csv 文件的编码。如果没有 BOM,Notepad++ 应将类型标记为"UTF-8 w/o BOM"。使用 BOM,它将显示"UTF-8"。