我的网络应用程序以 base64 编码字符串的形式接收数据,该字符串使用 atob 解码,并通过 URL.createObjectURL() 存储。然后通过右键单击另存为对话框下载此数据。当源文件是 ascii 编码时,下载的文件总是与源文件匹配。但是,当源文件只是纯二进制数据时,情况并非如此。非 ascii 编码的下载文件与其源文件的差异似乎表明下载的文件是 UTF-8 编码的。如何解决这个问题?请注意,我被锁定使用 Firefox 10。
问问题
1007 次
1 回答
0
将字符串转换为 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);
于 2013-11-11T01:31:34.463 回答