Angular 7+: как разрешить загрузку файлов только с содержимым в utf-8?

Я использую 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);
  }

Спасибо.

Или, может быть, вам следует рассмотреть стороннюю библиотеку, например: github.com/aadsm/jshardet для определения кодировки :)

guzmanoj 30.04.2019 16:14

Он должен начаться с сообщения пользователям о требовании. Если ваши пользователи не поймут, их вообще не следует поощрять к использованию текстовых файлов.

Tom Blodget 01.05.2019 03:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
1 087
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вот документация 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>

Другие вопросы по теме