我使用FileReader api获得了mp4数据,但我在编码方面遇到了问题! 有了这个功能,
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与blob具有相同的filedata,但有些数据发生了变化!有了更多的细节,许多字符是相同的,但一些十六进制代码是不同的。我该如何解决这个问题?
答案 0 :(得分:0)
JavaScript中的字符串不能表示任意二进制数据,因此执行readAs 二进制字符串可能与您的想法不同。
readAsBinaryString的作用是为每个源字节提供一个目标字符(我没有使用它在我头顶使用的字符编码)。
所以如果你有一个utf-8字符说✔,那么readAsBinaryString会给你â
,因为那个字符是树长字节%E2%9C%94
。
如果你试图把它变回二进制/ blob,字符串â
被视为utf-8,它不是3字节而是7(%C3%A2%C5%93%E2%80%9D)
我的建议是使用readAsArrayBuffer,我确信CryptoJS支持arraybuffers。