Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript UTF-8 csv编码_Javascript_Csv_Utf 8 - Fatal编程技术网

Javascript UTF-8 csv编码

Javascript UTF-8 csv编码,javascript,csv,utf-8,Javascript,Csv,Utf 8,我有一个页面,作为我正在做的一项研究的认知测试 JS文件输出一个CSV文件,其中包含测试的详细结果 一些文本是希伯来语,CSV在Excel中显示乱码 我尝试了以下方法: var csvContent = "data:text/csv;charset=utf-8,"; 但我得到了同样的结果: ׳©׳—׳•׳¨ ׳¡׳’׳•׳ gray ׳©׳—׳•׳¨ ׳™׳¨׳•׳§ yellow ׳©׳—׳•׳¨ ׳׳“׳•׳ pink ׳׳₪׳•׳¨ ׳׳₪׳•׳¨ purple

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

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

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

我尝试了以下方法:

var csvContent = "data:text/csv;charset=utf-8,";
但我得到了同样的结果:

׳©׳—׳•׳¨    ׳¡׳’׳•׳ gray
׳©׳—׳•׳¨    ׳™׳¨׳•׳§    yellow
׳©׳—׳•׳¨    ׳׳“׳•׳  pink
׳׳₪׳•׳¨ ׳׳₪׳•׳¨ purple
׳™׳¨׳•׳§    ׳›׳×׳•׳ #FE642E
׳™׳¨׳•׳§    ׳¦׳”׳•׳‘    red
׳׳₪׳•׳¨ ׳©׳—׳•׳¨    pink
׳׳₪׳•׳¨ ׳›׳×׳•׳ gray
׳™׳¨׳•׳§    ׳¦׳”׳•׳‘    purple
׳׳“׳•׳  ׳׳₪׳•׳¨ pink
整个密码都在上面
我做错了什么?

Excel不会自动识别UTF-8文档的编码。要实现这一点,您需要将UTF-8 BOM\uefbbbf添加到文件的最开头


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

Excel不会自动识别UTF-8文档的编码。要实现这一点,您需要将UTF-8 BOM\uefbbbf添加到文件的最开头


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

正如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的塞尔维亚西里尔文姓名。

正如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的塞尔维亚西里尔文姓名。

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

var csv = "\ufeff"+CSV;
从这里得到同样的答案:

我从这里找到了解决方案:


我将它们放在这里,以防您正在搜索解决方案。

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

var csv = "\ufeff"+CSV;
从这里得到同样的答案:

我从这里找到了解决方案:


我把它们放在这里,以防您正在搜索解决方案。

您可以将html标记添加到小提琴吗?更新了JSFIDLE链接:什么在消耗您创建的窗口中的CSV内容?浏览器只是试图将CSV显示为文本,还是启动了其他程序Excel或其他什么?它启动Excel,说我使用的版本是希伯来语。众所周知,Microsoft Office在编码方面很差劲,仅供参考。您可以将html标记添加到FIDLE吗?更新了JSFIDLE链接:您创建的窗口中的CSV内容是什么?浏览器只是试图将CSV显示为文本,还是启动了其他程序Excel或其他什么?它启动Excel,我用的版本是希伯来语。Microsoft Office在编码方面臭名昭著,仅供参考。谢谢。开始时的String.fromCharCode0xFEFF已完成任务。开始时的String.fromCharCode0xFEFF已工作