如何找到Javascript中输入[type =“file”]加载的文本文件的字符集

时间:2017-12-20 21:19:58

标签: javascript html5 character-encoding

我想阅读用户的文件,并给了他这个文件的修改版本。我使用输入与类型文件来获取文本文件,但我如何获取加载文件的字符集,因为在不同的情况下它可以是各种...上传的文件格式.txt或类似的东西,不是.html:)< / p>

var handler = document.getElementById('handler');
var reader = new FileReader();

handler.addEventListener('click', function() {
    reader.readAsText(firstSub.files[0], /* Here I need use a correctly charset */);
});

reader.addEventListener("loadend", function() {
    console.dir(reader.result.split('\n'));
});

3 个答案:

答案 0 :(得分:2)

您应该查看此库encoding.js

他们也有工作demo。我建议你首先尝试使用你通常会使用的文件来查看它是否正确检测到编码,然后在项目中使用该库。

答案 1 :(得分:2)

就我而言(我制作了一个小型网络应用程序,它接受字幕 .srt 文件并删除时间码和换行符,制作可打印的文本),预见 2 种编码类型就足够了:UTF-8 和 CP1251(在我尝试过的所有情况——包括拉丁字母和西里尔字母——这两种类型就足够了)。一开始我尝试用UTF-8编码,如果不成功,一些字符会被'�'符号代替。因此,我检查结果是否存在这些迹象,如果发现,则使用 CP1251 编码重复该过程。所以,这是我的代码:

function onFileInputChange(inputDomElement, utf8=true) {
    const file = inputDomElement.files[0];
    const reader = new FileReader();
    reader.readAsText(file, utf8 ? 'UTF-8' : 'CP1251');
    reader.onload = () => {
        let result = reader.result;
        if(utf8 && result.match(/�/)) {
            onFileInputChange(inputDomElement, false);
            console.log('The file encoding is not utf-8! Trying CP1251...');
        } else {
            document.querySelector('#textarea1').value = file.name.replace(/\.(srt|txt)$/, '').replace(/_+/g, '\ ').toUpperCase() + '\n' + result;
        }
    }
}

答案 2 :(得分:0)

其他解决方案对我想要做的事情不起作用,所以我决定创建 my own module,它可以检测通过 for(int k=-1;k<2;k++){ for(int l=-1;l<2;l++){ if(abs(k) + abs(l) == 1){ //cout<<k<<" "<<l<<endl; travel(i+k, j+l); } } } / {{1} 加载的任何文件的字符集和语言}.

您通过 input[type='file'] 标签加载它,然后使用 FileReader API 函数检索字符集/编码:

<script>
languageEncoding

有关更完整的示例/说明,请查看文档的 this part