【发布时间】:2017-09-18 22:21:00
【问题描述】:
我有一个简短的 JavaScript 函数,它将获取上传的文件并显示它的十六进制等效项。比较原始文件和十六进制编辑器中的输出表明它们部分不同但不完全不同。
String.prototype.hexEncode = function(){
var hex, i;
var result = "";
for (i = 0; i < this.length; i++) {
hex = this.charCodeAt(i).toString(16);
result += ("" + hex).slice(-4);
}
return result
}
function upload() {
var file = document.getElementById("fileToUpload").files[0];
var reader = new FileReader();
reader.readAsText(file, "windows-1252");
reader.onload = function (evt) {
var program = evt.target.result.hexEncode();
program = program;
console.log(program);
}
}
这里是原始文件和彼此相邻的输出:
2A 2A 54 49 38 33 46 2A 1A 0A 0A 43 72 65 61 74
2A 2A 54 49 38 33 46 2A 1A AA 43 72 65 61 74 65
导致输出差异的原因是什么?任何帮助将不胜感激。
【问题讨论】:
-
.readAsText可能会改变内容,你试过用.readAsArrayBuffer代替吗? -
绝对不要尝试从 readAsText 结果生成十六进制转储。此外,使用非默认编码。 readAsArrayBuffer 是你想要的。
-
预期结果是什么?
-
输入输出完全相同。
标签: javascript ecmascript-6 filereader iso-8859-1 windows-1252