首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用指定的字符集下载BLOB内容

使用指定的字符集下载BLOB内容
EN

Stack Overflow用户
提问于 2013-09-21 04:20:57
回答 4查看 44.9K关注 0票数 39

真的可以改变Blob字符集吗?我已经试了好几个小时了,但还是不起作用。。

代码语言:javascript
复制
jQuery("#download").click(function() {
    var csv_content = jQuery("#csv").val(),
        download = document.createElement("a"),
        blob = new Blob([csv_content], { type: "text/csv;charset=ISO-8859-1" });

    download.href = window.URL.createObjectURL(blob);
    download.download = "test.csv";

    var event = document.createEvent("MouseEvents");
    event.initMouseEvent(
        "click", true, false, window, 0, 0, 0, 0, 0
        , false, false, false, false, 0, null
    );
    download.dispatchEvent(event);    
});

我需要导出一个CSV在Excel上打开,但它总是用UTF-8保存,Excel无法处理它。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-21 04:20:57

之前我已经找到了解决方案了。

事实上,字符集的更改还没有解决。但是,我发送了下载过程的UTF-8头文件,Excel能够正确地理解文件格式。Thanks to this response of Erik Töyrä

代码语言:javascript
复制
blob = new Blob(["\ufeff", csv_content]);
票数 154
EN

Stack Overflow用户

发布于 2016-04-26 19:44:13

在我的例子中,我使用Angular JS从服务器接收一个编码的CSV文件,以响应HTTP POST。问题是从XMLHttpRequests返回的CSV被表示为Unicode (我想说UTF-8,但根据this它是UTF-16)字符串,而不是预编码的二进制数据。在您的示例中看起来也是如此,它是从DOM元素读取CSV吗?在这种情况下,它最终在内存中表示为Unicode,因此无论您将编码元数据设置为什么值,数据仍然是Unicode。

我的Angular代码是这样做的:

代码语言:javascript
复制
$http.post('/url', postData, {}).then(handleResponse);

handleResponse内部,数据已经用Unicode表示。根据Angular的$http服务,不在配置对象上提供responseType属性会导致它缺省为string。它的according to Mozilla最终表示为UTF-16中的DOMString,而我们实际上希望它是一个Blob。在配置对象上将responseType设置为blob成功阻止了对内容进行解码。如果没有这一点,响应数据在被放入Blob之前会被无意中解码。

代码语言:javascript
复制
$http.post('/url', postData, {responseType: 'blob'}).then(handleResponse);

然后,我使用saveAs()让浏览器向用户提供文件内容。

代码语言:javascript
复制
function handleResponse(response) {
    let headers = response.headers();
    let blob = new Blob([response.data], {type: headers['content-type']});
    saveAs(blob, headers['x-filename']);
}

我有了从https://stackoverflow.com/a/16791296/1225617设置responseType的想法

票数 9
EN

Stack Overflow用户

发布于 2020-05-21 15:08:50

代码语言:javascript
复制
  const blob = new Blob([csvData], { type: 'text/csv;charset=utf-8;' });
    if (navigator.msSaveBlob) { // IE 10+
      navigator.msSaveBlob(blob, filename);
    } else {
      const link = document.createElement('a');
      if (link.download !== undefined) {
        // Browsers that support HTML5 download attribute
        const url = URL.createObjectURL(blob);
        link.setAttribute('href', url);
        link.setAttribute('download', filename);
        link.style.visibility = 'hidden';
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      }
    }

这适用于在vuejs中使用excel格式的csv导出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18925210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档