Konventionelle LösungVerwenden Sie FileReader, um die Datei im UTF-8-Format zu lesen, und bestimmen Sie, ob die Datei UTF-8 ist, basierend darauf, ob der Dateiinhalt verstümmelte Zeichen enthält. Wenn � vorhanden ist, ist die Dateikodierung nicht UTF-8, andernfalls ist es UTF-8. Der Code lautet wie folgt: const isUtf8 = async (Datei: Datei) => { returniere und warte auf neues Promise((lösen, ablehnen) => { Konstante Leser = neuer FileReader(); reader.readAsText(Datei); reader.onloadend = (e: beliebig): void => { const Inhalt = e.Ziel.Ergebnis; const encodingRight = content.indexOf("") === -1; wenn (KodierungRechts) { auflösen(Kodierungsrechts); } anders { reject(new Error("Fehler im Kodierungsformat, bitte laden Sie eine Datei im UTF-8-Format hoch")); } }; reader.onerror = () => { reject(new Error("Das Lesen des Dateiinhalts ist fehlgeschlagen, bitte prüfen Sie, ob die Datei beschädigt ist")); }; }); }; Das Problem bei dieser Methode besteht darin, dass bei sehr großen Dateien, z. B. mehreren GB, der vom Browser gelesene Inhalt direkt im Speicher abgelegt wird und die Instanz von fileReader direkt „onerror“ auslöst und einen Fehler ausgibt, wodurch der Browser manchmal direkt abstürzt. Lösung für große DateienBei großen Dateien können Sie den Dateiinhalt abtasten und die Datei in Slices aufteilen. Hier werden 100 Slices verwendet. Schneiden Sie für jede ausgeschnittene Datei das erste 1-KB-Segment aus und lesen Sie es im String-Modus. Wenn 1024B genau in der Mitte einer chinesischen Zeichenkodierung abgeschnitten wird, kann dies beim Lesen als Zeichenfolge zu einem Fehler führen, d. h., „�“ kann am Anfang und am Ende erscheinen und wird als Nicht-UTF-8-Segment betrachtet. Zu diesem Zeitpunkt können Sie die erste Hälfte der Zeichenfolge nehmen, die 1 KB entspricht, und dann feststellen, ob sie vorhanden ist. Die oben genannten Konstanten können je nach Bedarf angepasst werden. Der Code lautet wie folgt: const getSamples = (Datei: Datei) => { const filesize = Dateigröße; Konstante Teile: Blob[] = []; if (Dateigröße < 50 * 1024 * 1024) { teile.push(Datei); } anders { sei gesamt = 100; const Stichprobengröße = 1024 * 1024; const chunkSize = Math.floor(Dateigröße / Gesamt); lass start = 0; let end = Beispielgröße; während (Gesamt > 1) { Teile.push(Datei.Slice(Start, Ende)); Start += Blockgröße; Ende += Blockgröße; gesamt--; } } Rücksendeteile; }; const isUtf8 = (Dateiteil: Blob) => { returniere neues Promise((lösen, ablehnen) => { const fileReader = neuer FileReader(); fileReader.readAsText(Dateiteil); fileReader.onload = (e) => { const str = e.Ziel?.Ergebnis als Zeichenfolge; // Nimm ungefähr die Hälfte const sampleStr = str?.slice(4, 4 + str?.length / 2); wenn (sampleStr.indexOf("�") === -1) { auflösen (void 0); } anders { reject(neuer Fehler (Fehler im Kodierungsformat, bitte laden Sie eine Datei im UTF-8-Format hoch)); } }; fileReader.onerror = () => { reject(new Error(Lesen des Dateiinhalts fehlgeschlagen, bitte prüfen Sie, ob die Datei beschädigt ist")); }; }); }; exportiere standardmäßige asynchrone Funktion (Datei: Datei) { const samples = getSamples(Datei); lass res = true; für (const Dateiteil von Beispielen) { versuchen { warte auf isUtf8(filePart); } Fehler abfangen { res = falsch; brechen; } } Rückgabewert; } Dies ist das Ende dieses Artikels darüber, wie js bestimmt, ob eine Datei in UTF-8 codiert ist. Weitere relevante Inhalte zur Beurteilung von UTF-8 durch js finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: mysql5.6.zip-Format komprimierte Version Installations-Grafik-Tutorial
1. Laden Sie die Software herunter 1. Gehen Sie a...
In diesem Artikelbeispiel wird der spezifische Co...
30 kostenlose englische Ribbon-Schriftarten in hoh...
Häufig gestellte Fragen zu benutzerdefinierten Bi...
Externe temporäre Tabellen Eine mit CREATE TEMPOR...
Ja, gespeicherte MySQL-Prozeduren scheinen sehr s...
Inhaltsverzeichnis 1. Herunterladen 2. Installier...
Wenn Sie nginx als Reverse-Proxy verwenden, könne...
In diesem Artikel finden Sie das grafische Tutori...
Es gibt eine Interviewfrage, die Folgendes erforde...
Vorwort [root@localhost ~]# cat /etc/fstab # # /e...
Das Befehlsmuster ist ein Verhaltensentwurfsmuste...
MySQL 8.0.22 Download-, Installations- und Konfig...
Vorwort Überprüfung und Zusammenfassung von REM-A...
Inhaltsverzeichnis 1. Fehlertoleranz bei der Joba...