2017-06-13 18 views
0

我使用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,但一些數據變了!更詳細地說,許多字符是相同的,但是一些十六進制代碼是不同的。我怎麼解決這個問題?

回答

0

JavaScript中的字符串不能表示任意的二進制數據,所以這樣做readAs 二進制字符串可能不是你想象的那樣。
readAsBinaryString所做的是爲每個源字節提供一個目標字符(我不會使用從我頭頂開始使用的字符編碼)。
所以,如果你有一個UTF-8字符說✔,然後readAsBinaryString會給你â因爲該字符是樹字節長%E2%9C%94
如果你試圖把這個回二進制/團塊字符串â被視爲UTF-8這是不是3個字節,但7(%C3%A2%C5%93%E2%80%9D)

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

相關問題