当我将一个解码的ArrayBuffer分配给一个dom.value,然后再次对其进行编码时,我没有得到相同的ArrayBuffer。在下面的示例中,A是“ ArrayBuffer {byteLength:394924}”,而B是“ ArrayBuffer {byteLength:585517}”?为什么?
Fbx是Autodesk的3D模型文件格式。它是二进制的,不是文本。我想在模型上传之前将其加载到预览器中,而只是在客户端Web浏览器站点上本地加载。
html
<input id="fileUploadInput" type="file" accept=".fbx"/>
JavaScript
let _handleFileSelect = function ( event ) {
let reader = new FileReader();
let files = {... event.target.files};
let file = files[0];
reader.readAsArrayBuffer(file);
reader.onload = (function(reader) {
return function() {
let fbxBuffer = reader.result;
console.log("A", fbxBuffer);
let dec = new TextDecoder();
document.getElementById('fbxFileInput').value = dec.decode(fbxBuffer);
let v = document.getElementById('fbxFileInput').value;
let enc = new TextEncoder();
console.log('B', (enc.encode(v)).buffer);
}
}
var multipleFilesInputElem = document.getElementById( 'fileUploadInput' );
multipleFilesInputElem.addEventListener( 'change' , _handleFileSelect, false);
问题可以概括如下:“为什么A和B不同?”
console.log('A', fbxBuffer);
console.log('B', (new TextEncoder().encode(new TextDecoder().decode(fbxBuffer))).buffer);
某些ArrayBuffer值不相同,但有些是!
答案 0 :(得分:0)
从定义上看,这个问题似乎不对劲。正如Pointy所说,在将二进制值解码为UTF-8时会丢失一些信息,因此不可能再次将UTF-8反转为ArrayBuffer二进制值。有效的二进制部分仅是那些引用文本值的部分。