1

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

4

1 回答 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 回答