FileReader - 支持哪些编码?

时间:2016-11-24 15:29:15

标签: javascript html5 encoding filereader

想要将用户输入的文件作为文本进行同步。

可以依赖于现代浏览器的使用,所以我使用 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>

所以我的问题是:

  1. 我在哪里可以获得支持的编码列表来填充选项值?
  2. 如何确定这些值的确切写入(是'utf8'还是'UTF-8'还是......)并且取决于操作系统/浏览器?
  3. 如果不支持编码,readAsText(myfile,unsupportedEncoding)是否会抛出任何错误?
  4. 我不想使用任何主要的第三方库。

    奖金问题:

    是否有一种简单的方法可以获得值的有意义的翻译,例如 cp10029 表示 Mac(中欧)

1 个答案:

答案 0 :(得分:1)

  1. 编码标准-https://github.com/whatwg/encoding/(JSON格式-https://github.com/whatwg/encoding/blob/master/encodings.json。使用字段“标签”中的值)

enter image description here

  1. 编码参数不区分大小写。

  2. 否,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");
    }
    

    }

Demo

要获取值的转换,可以使用JSON文件(https://github.com/whatwg/encoding/blob/master/encodings.json),参数“ heading”和“ name”。