【问题标题】:UTF-8 csv encodingUTF-8 csv 编码
【发布时间】:2015-03-04 07:47:15
【问题描述】:

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

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

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

我尝试了以下方法:

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

但我得到了相同的结果:

׳©׳—׳•׳¨    ׳¡׳’׳•׳ gray
׳©׳—׳•׳¨    ׳™׳¨׳•׳§    yellow
׳©׳—׳•׳¨    ׳׳“׳•׳  pink
׳׳₪׳•׳¨ ׳׳₪׳•׳¨ purple
׳™׳¨׳•׳§    ׳›׳×׳•׳ #FE642E
׳™׳¨׳•׳§    ׳¦׳”׳•׳‘    red
׳׳₪׳•׳¨ ׳©׳—׳•׳¨    pink
׳׳₪׳•׳¨ ׳›׳×׳•׳ gray
׳™׳¨׳•׳§    ׳¦׳”׳•׳‘    purple
׳׳“׳•׳  ׳׳₪׳•׳¨ pink

我做错了什么?

【问题讨论】:

  • 你能把你的 html 标记添加到小提琴吗?
  • 更新了 JSfiddle 链接 :)
  • 是什么消耗了您创建的窗口中的 CSV 内容?浏览器只是试图将 CSV 显示为文本,还是启动其他程序(Excel 或其他)?
  • 它启动 Excel,我使用的版本是希伯来语。
  • Microsoft Office 在编码方面出了名的糟糕,仅供参考。

标签: javascript csv utf-8


【解决方案1】:

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

var csv = "\ufeff"+CSV;

来自这里的相同答案: same answer

我从这里找到了解决方案: similar problem and solution

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

【讨论】:

    【解决方案2】:

    正如 Alastair 指出的那样,如果您希望 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 的塞尔维亚西里尔文名字。

    【讨论】:

    • 谢谢。 String.fromCharCode(0xFEFF) 一开始就起作用了
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-16
      • 2012-12-04
      • 2014-07-01
      • 2020-01-25
      • 1970-01-01
      • 2017-07-16
      • 2015-04-02
      • 1970-01-01
      相关资源
      最近更新 更多