如何使用具有正确编码的FileReader api使用javascript获取二进制数据

时间:2017-06-13 13:38:55

标签: filereader

我使用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,但有些数据发生了变化!有了更多的细节,许多字符是相同的,但一些十六进制代码是不同的。我该如何解决这个问题?

1 个答案:

答案 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。