繁体   English   中英

Javascript下载没有base64的二进制数据

[英]Javascript download binary data without base64

我想下载一些二进制数据,但Chrome强制将其转换为utf-8,从而弄乱了字节。 如果我将href设置为数据URI并使用base64编码,则可以使用,但是我想避免这种情况,而应使用BLOB。

有没有办法阻止Chrome将二进制数据转换为utf-8?

 const data = "\\x00\\xff\\xfe\\xe2" console.log(data) const file = new Blob([data]) const a = document.getElementById("a") const url = URL.createObjectURL(file) a.href = url; a.download = "test.txt"; 
 <a id="a">Download</a> 

在此示例中,您可以看到我的字符串包含字节

00 ff fe e2

然后将该字符串转换为Blob。 但是,当您在Chrome中下载文件并再次查看字节时,您会发现

20 c3 bf c3 be c3 a2

代替。 我认为发生的事情是chrome占用了每个字节,将其读取为utf-16并将其转换为utf-8。 例如,当读为utf-16时feþ ,而c3 be utf-8

Blob构造函数将字符串隐式编码为UTF-8,因此应传递一个类型化的数组,例如Uint8Array

 const data = "\\x00\\xff\\xfe\\xe2" console.log(data) const file = new Blob([Uint8Array.from(data, c => c.charCodeAt(0))]) const a = document.getElementById("a") const url = URL.createObjectURL(file) a.href = url; a.download = "test.txt"; 
 <a id="a">Download</a> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM