想要将用户输入的文件作为文本进行同步。
可以依赖于现代浏览器的使用,所以我使用 FileReader (就像魅力一样)。
reader.readAsText(myfile, encoding);
我知道encoding
默认为UTF-8。
但是,由于我的用户将从各种来源(Windows,Mac,Linux)和各种浏览器上传文件,我要求用户通过选择框提供编码。
所以,例如对于西欧的Windows文本文件,我希望用户选择例如窗口1252。
我无法找到FileReader支持的编码列表(假设这至少取决于浏览器)。
我不是要求自动确定编码,我只是想以这样的方式填充我的选择框:
<select id="encoding">
<option value="windows-1252">Windows (Western Latin)</option>
<option value="utf-8">UTF-8</option>
<option value="...">...</option>
</select>
所以我的问题是:
我不想使用任何主要的第三方库。
奖金问题:
是否有一种简单的方法可以获得值的有意义的翻译,例如 cp10029 表示 Mac(中欧)?
答案 0 :(得分:1)
编码参数不区分大小写。
否,readAsText(myfile,unsupportedEncoding)不会引发任何错误。该函数仅使用默认编码(“ utf8”)。
window.onload = function(){
//Check File API support
if (window.File && window.FileList && window.FileReader) {
var filesInput = document.getElementById("files");
filesInput.addEventListener("change", function(event) {
var files = event.target.files; //FileList object
var output = document.getElementById("result");
for (var i = 0; i < files.length; i++) {
var file = files[i];
//Only plain text
if (!file.type.match('plain')) continue;
var picReader = new FileReader();
picReader.addEventListener("load", function(event) {
var textFile = event.target;
var div = document.createElement("div");
div.innerText = textFile.result;
output.insertBefore(div, null);
});
//Read the text file
picReader.readAsText(file, "cP1251");
}
});
}
else {
console.log("Your browser does not support File API");
}
}
要获取值的转换,可以使用JSON文件(https://github.com/whatwg/encoding/blob/master/encodings.json),参数“ heading”和“ name”。