如何使用FileReader API使用JavaScript获取二进制数据并使用正确编码

问题描述:

我使用FileReader API得到了一个mp4数据,但是我在编码时遇到了问题! 有了这个功能,如何使用FileReader API使用JavaScript获取二进制数据并使用正确编码

var reader = new FileReader(); 
    var blob = new Blob([this.response], {type : "video/mp4"}); 
    reader.onload= function (evt) { 
     mp4text = evt.target.result; 
     mp4text = mp4text.toString() 
     //mp4text = mp4text.slice(22); 
     //mp4text = CryptoJS.AES.encrypt(mp4text, "test"); 
     //mp4text = window.atob(mp4text); 
     var myBlob = new Blob([evt.target.result], {type : "video/mp4"});//NOT SAME contrast to blob! 
     var downloadUrl = URL.createObjectURL(myBlob); 
     document.getElementById('myVideo').src = downloadUrl; 
    } 
    reader.readAsBinaryString(blob); 

我想myBlob具有相同的FILEDATA为BLOB,但一些数据变了!更详细地说,许多字符是相同的,但是一些十六进制代码是不同的。我怎么解决这个问题?

JavaScript中的字符串不能表示任意的二进制数据,所以这样做readAs 二进制字符串可能不是你想象的那样。
readAsBinaryString所做的是为每个源字节提供一个目标字符(我不会使用从我头顶开始使用的字符编码)。
所以,如果你有一个UTF-8字符说✔,然后readAsBinaryString会给你â因为该字符是树字节长%E2%9C%94
如果你试图把这个回二进制/团块字符串â被视为UTF-8这是不是3个字节,但7(%C3%A2%C5%93%E2%80%9D)

我建议使用readAsArrayBuffer,我相信CryptoJS支持arraybuffers。