Javascript 如何从atob创建二进制blob-当前获得不同的字节

Javascript 如何从atob创建二进制blob-当前获得不同的字节,javascript,c#,base64,Javascript,C#,Base64,我在服务器上创建了一个二进制Excel文件,使用JavaScript/JQuery$ajax调用调用的Convert.ToBase64String(FileData)从C#WebMethod返回该文件。我已经确认base64字符串数据到达客户端,但是当我尝试将其转换为二进制blob并保存时,保存到磁盘的字节与服务器上的字节不同。(我得到了很多0xC3等字节,看起来很像utf8双字节注入) 成功处理程序代码包括: var excelBlob = new Blob([atob(msg.d)], {

我在服务器上创建了一个二进制Excel文件,使用JavaScript/JQuery$ajax调用调用的Convert.ToBase64String(FileData)从C#WebMethod返回该文件。我已经确认base64字符串数据到达客户端,但是当我尝试将其转换为二进制blob并保存时,保存到磁盘的字节与服务器上的字节不同。(我得到了很多0xC3等字节,看起来很像utf8双字节注入)

成功处理程序代码包括:

var excelBlob = new Blob([atob(msg.d)], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;' });
...
var a = document.createElement('a');
...
a.href = window.URL.createObjectURL(excelBlob);
a.setAttribute('download', 'Excel.xlsx');
完成下载后,它的字节值不正确。与源代码的二进制比较表明它很接近,但插入了C3和类似的值


要将Base64字符串正确转换为客户机二进制blob,我是否做错了或缺少了什么

新的Blob构造函数将遇到的任何字符串编码为UTF-8()。由于您处理的是二进制数据,因此该get将转换为UTF-8多字节表示

相反,在传递给Blob构造函数之前,需要将数据转换为字节数组

以下代码在Chrome中适用于我:

var binary = atob(base64)
var array = new Uint8Array(binary.length)
for( var i = 0; i < binary.length; i++ ) { array[i] = binary.charCodeAt(i) }
new Blob([array])
var binary=atob(base64)
var数组=新的Uint8Array(binary.length)
对于(var i=0;i

也就是说,我不知道
atob
在不同浏览器中是否定义得很好(我猜这是mozilla提供更长示例代码的原因)。

谢谢,这非常有效!一些跨浏览器测试,我在那里,非常感谢。
var binary = atob(base64)
var array = new Uint8Array(binary.length)
for( var i = 0; i < binary.length; i++ ) { array[i] = binary.charCodeAt(i) }
new Blob([array])