簡體   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