在浏览器中保存二进制数据,而不会在下载时获得UTF8编码

时间:2013-11-10 23:28:25

标签: javascript encoding base64

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

1 个答案:

答案 0 :(得分:0)

将字符串转换为Arraybuffer,它应该可以工作。如果有任何方法可以直接将数据放入数组缓冲区而不传递最好的解决方案。

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

fiddle

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);