【问题标题】:FileReader - which encodings are supported?FileReader - 支持哪些编码?
【发布时间】:2016-11-24 15:29:14
【问题描述】:

想要将用户输入的文件简单地读取为文本。

可以依赖现代浏览器的使用,所以我使用 FileReader 来实现这一点(它的作用就像一个魅力)。

reader.readAsText(myfile, encoding);

我知道encoding 默认为 UTF-8。

但由于我的用户会从各种来源(Windows、Mac、Linux)和各种浏览器上传文件,我要求用户通过选择框提供编码。

例如对于西欧 Windows 文本文件,我希望用户选择例如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) 是否会抛出任何我可以捕获的错误?

我不希望为此使用任何主要的 3rd 方库。

额外问题:

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

【问题讨论】:

  • 对谷歌的粗略搜索并没有发现太多信息。也许这会有所帮助? stackoverflow.com/questions/37884928/…
  • 谢谢,我用谷歌搜索了很多,这就是我在这里问的原因:-(我检查了你的建议,但这指的是无真实文本输入恕我直言,但在我的情况下,所有文件都是“真实的” text" 仅以不同的编码输入。
  • 支持的代码页可以在here找到。我建议再看一下 Dan 提供的链接,因为这是一个很好的方法。这种方法还可以让您检测 BOM 和特征,以便提前猜测编码。

标签: javascript html encoding filereader


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

  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)、参数“标题”和“名称”。

【讨论】:

  • 我有点担心 WHATWG 似乎是唯一一个试图跟踪显然唯一的生活水平的团体,但您的回答正确回答了我的所有问题,所以我会接受。一旦可能有更好/“官方”的回应,我可能会改变它,希望这听起来合理。
猜你喜欢
  • 2016-04-01
  • 2017-06-07
  • 2013-02-01
  • 2014-11-25
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
相关资源
最近更新 更多