私の Web アプリは、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 に答える