如何检测html FileReader的编码?

时间:2014-06-18 14:28:54

标签: jquery encoding filereader

txt文件可能是utf8 / GB2312,....但如果上传到我的服务器,我只得到了ascii。如何检测文件编码,所以我可以在readAsText()?

中设置
$("#fileinput").change(function(evt){
  if (!checkSupport())return; 
  var f = evt.target.files[0]; 
  if (!f) return;
  var r = new FileReader();
  r.onload = function(evt){   //file loaded successfuly
    g_fname=f.name;
    g_contents = evt.target.result;
    curpage.val(0);
    read_article();
  }
  r.readAsText(f,'GB2312');
});

2 个答案:

答案 0 :(得分:2)

截至 2021 年,我认为最简单的解决方案是使用 detect-file-encoding-and-language

您可以简单地通过 <script> 标签加载它:

  <script src="https://unpkg.com/detect-file-encoding-and-language/umd/language-encoding.min.js"></script>

来自文档:

// index.html
<body>
  <input type="file" id="my-input-field" />
  <script src="https://unpkg.com/detect-file-encoding-and-language/umd/language-encoding.min.js"></script>
  <script src="app.js"></script>
</body>
// app.js
document.getElementById("my-input-field").addEventListener("change", inputHandler);
function inputHandler(e) {
    const file = e.target.files[0];
    languageEncoding(file).then(fileInfo => console.log(fileInfo));
    // Possible result: { language: english, encoding: UTF-8, confidence: { language: 0.97, encoding: 1 } }
}

答案 1 :(得分:1)

我知道这是一个老帖子,但由于没有答案,我想把它扔给那些可能感兴趣的人:

您应该查看此库encoding.js

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