1

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