Javascript 从数据URI生成CSV文件下载;IE9中的问题,因为它保存为UCS 2 LE而不是UTF-8

Javascript 从数据URI生成CSV文件下载;IE9中的问题,因为它保存为UCS 2 LE而不是UTF-8,javascript,csv,character-encoding,internet-explorer-9,data-uri,Javascript,Csv,Character Encoding,Internet Explorer 9,Data Uri,我正在尝试使用JavaScript生成CSV数据,并提示用户将其保存为CSV文件 该代码在IE10+和其他浏览器中运行良好,但我还需要支持IE9 在IE9中,生成的CSV文件在Excel中显示如下: 换言之,它看起来似乎不知何故没有将逗号作为分隔符。这可以通过添加下面代码中注释掉的行来解决,但是文件中的非罗马字符会出现乱码 在Notepad++中打开CSV文件时,我注意到IE9生成的文件编码为UCS-2 LE,这与其他浏览器生成的UTF-8文件不同: 为了检查,我在Vim中打开了文件,看到了

我正在尝试使用JavaScript生成CSV数据,并提示用户将其保存为CSV文件

该代码在IE10+和其他浏览器中运行良好,但我还需要支持IE9

在IE9中,生成的CSV文件在Excel中显示如下:

换言之,它看起来似乎不知何故没有将逗号作为分隔符。这可以通过添加下面代码中注释掉的行来解决,但是文件中的非罗马字符会出现乱码

在Notepad++中打开CSV文件时,我注意到IE9生成的文件编码为UCS-2 LE,这与其他浏览器生成的UTF-8文件不同:

为了检查,我在Vim中打开了文件,看到了UCS-2LE字节顺序标记(
fffe-fffe
):

如果在该菜单中单击UTF-8并保存文件,Excel将正常显示CSV文件。因此,我假设问题的根源是IE9使用错误的编码保存文件

有没有什么方法可以强制IE9使用UTF-8而不是UCS-2LE,或者让这段代码在IE9中工作以从数据URI下载CSV数据作为文件

var file = getCSVdata();
var filename = getShortDateString() + "_search_results.csv";

var link = document.createElement('a');

//This is for modern browsers - works fine
if (typeof link.download === 'string') { 
    link.href = file;
    link.target = "_new";
    link.onclick = "return false";
    link.download = filename;

    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);

} 
//Here we go...
else {
    //IE10+
    if (window.navigator.msSaveBlob) {
        file = decodeURIComponent(
            file.replace("data:text/csv;charset=utf-8,",""));

        var blob = new Blob([file], { 
            type: "application/csv;charset=utf-8;"
        });
        navigator.msSaveBlob(blob, filename);
    }
    else { //IE9 - this doesn't work 
        var iframe = document.getElementById('csvDownloadFrame');
        iframe = iframe.contentWindow || iframe.contentDocument;

        //get pure CSV data without the data-uri prefix
        file = decodeURIComponent(
                   file.replace("data:text/csv;charset=utf-8,",""));

        //file = 'sep=,\r' + file; //if uncomment this, then CSV file recognized columns normally, but garbles the non-Roman alphabet characters

        iframe.document.open("text/csv", "replace");
        iframe.document.write(file);
        iframe.document.close();
        iframe.focus();
        iframe.document.execCommand('SaveAs', true, filename);
    }
}

简单地停止支持旧的IE9,就像微软将在2016年1月12日所做的那样,那是一年前的事了,许多人,包括银行,在未来的几年里仍将使用IE9。你显然不是在软件行业工作。谢谢你宝贵的建议。哦,我用软件工作很好,并且已经这样做了8年,不仅仅是在网络上。如今,只有0.37%的瑞典人使用ie9。ie8甚至不在…的地图上。。。(ie8全球0.8%)(ie9全球0.53%)我们不会花费资源/金钱/时间来维护旧版本的ie,没有人会使用它,ie9也不会在未来几年出现,它几乎已经完全消亡,可能在一年内它会下降到0%@无休止的堆栈溢出不是讨论的地方,但既然没人在看。。。伙计,别开玩笑了。我不关心瑞典0.53%的用户,因为我们100%的用户使用IE9。如果客户是一家公司,他们在成千上万台机器上只有一个浏览器,而且他们不会很快升级。只需停止支持旧的IE9,就像微软将在2016年1月12日所做的那样@那是一年前的事了,许多人,包括银行,在未来几年中仍将使用IE9。你显然不是在软件行业工作。谢谢你宝贵的建议。哦,我用软件工作很好,并且已经这样做了8年,不仅仅是在网络上。如今,只有0.37%的瑞典人使用ie9。ie8甚至不在…的地图上。。。(ie8全球0.8%)(ie9全球0.53%)我们不会花费资源/金钱/时间来维护旧版本的ie,没有人会使用它,ie9也不会在未来几年出现,它几乎已经完全消亡,可能在一年内它会下降到0%@无休止的堆栈溢出不是讨论的地方,但既然没人在看。。。伙计,别开玩笑了。我不关心瑞典0.53%的用户,因为我们100%的用户使用IE9。如果客户是一家公司,他们在成千上万台机器上只有一个浏览器,而且他们不会很快升级。