Javascript UTF-8 csv编码
我有一个页面,作为我正在做的一项研究的认知测试 JS文件输出一个CSV文件,其中包含测试的详细结果 一些文本是希伯来语,CSV在Excel中显示乱码 我尝试了以下方法: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
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已工作