JavaScript 关于FileSaver保存十六进制文件的错误

一次项目中,为了图省事儿,我想用js做网页脚本,来实现一些自动化操作。无非就是读取文件,摘取有用信息,转换成十六进制bin保存。

然而在保存成bin的过程中出现了问题,详细是怎样的问题呢,可以参考这位博主的问题:https://ask.csdn.net/questions/765886

 

出现这样的问题的原因其实很简单。将十六进制转换成字符串的方法,在网上大多使用的方法是 String.fromCharCode ,这个方法会把一个数字码转换为字符。而我们在保存文件的时候,同样也是用转换得到的字符串保存的。这就引入了一个问题:通常UTF8等编码不能识别大数字的字符,也即1XXX XXXXb会被错误认知,具体可以看UTF8的编码原理。而我们在转换的过程中,很可能会有比较大的十六进制码,比如0xFF,于是就会导致了错误识别。

 

那么怎么解决这个方法呢?那就是不要用字符串去保存文件了。将原生字符串转换为Uint8Array的数组,然后再通过FileSaver保存到文件。注意opt要使用application/octet-stream的选项。

var arrBuff = new ArrayBuffer(bytes.length); 
var arr = new Uint8Array(arrBuff);

for (var i = 0; i < bytes.length; i++) {
  arr [i] = bytes[i];
}

var blob = new Blob([arr], {type: "application/octet-stream"});
saveAs(blob, "download.bin");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值