Я использую angular 7+, у меня есть простая функция для загрузки файлов и чтения их содержимого, но я хотел бы знать, как определить кодировку содержимого документа, чтобы разрешать только документы с кодировкой utf-8.
async uploadFile(event) {
var document;
var reader = new FileReader();
let file = event.target.files[0];
reader.onload = ((file: any) => {
return (e: any) => {
document.description = e.srcElement.result;
document.title = title;
document.fileName = file.name;
}
})(file);
reader.readAsText(file);
}
Спасибо.
Он должен начаться с сообщения пользователям о требовании. Если ваши пользователи не поймут, их вообще не следует поощрять к использованию текстовых файлов.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вот документация FileReader.readAsText()
instanceOfFileReader.readAsText(blob[, encoding]);
Чтобы убедиться, что загруженный файл находится в формате UTF-8, выполните следующие действия:
instanceOfFileReader.readAsText(blob, 'UTF-8');
Знайте, что UTF-8 является настройкой по умолчанию, поэтому она должна работать, вы также можете сделать:
instanceOfFileReader.readAsText(blob);
Если кодировка не UTF-8, чтение должно завершиться ошибкой. Я не видел никакой документации по этому поводу, рассматривая это как нормативную документацию.
Вы должны попробовать загрузить файл с другой кодировкой, чтобы убедиться в этом.
В документации FileReader нет атрибута с именем encoding или чего-то подобного.
Не существует пуленепробиваемой техники для получения кодировки текстового файла. Во всяком случае, библиотека под названием джшардет пытается достичь этой цели.
function read(f) {
var reader = new FileReader();
reader.readAsText(f);
reader.onload = function(e) {
console.info(jschardet.detect(reader.result))
}
}<script src = "https://cdnjs.cloudflare.com/ajax/libs/jschardet/2.1.0/jschardet.min.js"></script>
<input type = "file" onchange = "read(this.files[0])"></input>
Или, может быть, вам следует рассмотреть стороннюю библиотеку, например: github.com/aadsm/jshardet для определения кодировки :)