繁体   English   中英

将二进制数据保存在浏览器中,而无需在下载时对其进行UTF8编码

[英]Saving binary data in a browser without it getting UTF8 encoded on download

我的Web应用程序以base64编码的字符串形式接收数据,该字符串使用atob进行解码,并通过URL.createObjectURL()进行存储。 然后,通过右键单击另存为对话框下载此数据。 当源文件经过ASCII编码时,下载的文件始终与源文件匹配。 但是,当源文件只是纯二进制数据时,情况并非如此。 非ascii编码的下载文件与其源文件的差异似乎显示下载的文件是UTF-8编码的。 如何解决此问题? 请注意,我被锁定使用Firefox 10。

将字符串转换为Arraybuffer,它应该可以工作。 如果有任何方法,您可以直接将数据获取到数组缓冲区中,而无需传递字符串,这将是最佳解决方案。

以下代码在FF10中进行了测试,并使用了已经过时的MozBlobBuilder。

小提琴

var str="",
    idx, len,
    buf, view, blobbuild, blob, url,
    elem;

// create a test string
for (var idx = 0; idx < 256; ++idx) {
  str += String.fromCharCode(idx);
}

// create a buffer
buf = new ArrayBuffer(str.length);
view = new Uint8Array(buf);

// convert string to buffer
for (idx = 0, len = str.length; idx < len; ++idx) {
  view[idx] = str.charCodeAt(idx);
}

blobbuild = new MozBlobBuilder();
blobbuild.append(buf);
blob = blobbuild.getBlob('application/octet-stream');
url = URL.createObjectURL(blob);

elem = document.createElement('a');
elem.href = url;
elem.textContent = 'Test';
document.body.appendChild(elem);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM