如何在 Javascript 中查找由 input[type="file"] 加载的文本文件的字符集

Але*_*вич 5 html javascript character-encoding

我想读取用户的文件并给他该文件的修改版本。我使用带有类型文件的输入来获取文本文件,但是如何获取加载文件的字符集,因为在不同情况下它可能会有所不同...上传的文件具有 .txt 或类似格式,而不是 .html :)

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'));
});
Run Code Online (Sandbox Code Playgroud)

Rom*_*din 5

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

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


小智 3

你应该看看这个库encoding.js

他们还有一个工作演示。我建议您首先使用您通常使用的文件进行尝试,看看它是否正确检测到编码,然后在项目中使用该库。