Saturday 16 September 2017

Javascript Read As Binary Optionen


ReadAsBinaryString sagt, dass die Daten als binäre Zeichenfolge dargestellt werden müssen. Wobei: jedes Byte durch eine Ganzzahl im Bereich 0..255 repräsentiert wird. JavaScript ursprünglich nicht einen binären Typ haben (bis ECMAScript 5s WebGL Unterstützung von typisierten Array (Details siehe unten) - sie wird von ECMAScript 2015s Arraybuffer ersetzt wurde) und so gingen sie mit einem String mit der Garantie, dass kein Zeichen im String gespeichert wäre Außerhalb des Bereichs 0..255. (Sie hätten mit einer Reihe von Zahlen, anstatt weg, aber sie den Ball hielt vielleicht große Strings sind speichereffizienter als große Arrays von Zahlen, da Zahlen sind Floating-Point). Wenn youre eine Datei lesen, das ist hauptsächlich Text in einem westlichen Skript ( Meistens Englisch, zum Beispiel), dann wird diese Zeichenkette viel wie Text aussehen. Wenn Sie eine Datei mit Unicode-Zeichen darin lesen, sollten Sie einen Unterschied bemerken, da JavaScript-Strings UTF-16 sind (Details unten), und so haben einige Zeichen Werte über 255, während eine binäre Zeichenfolge gemäß der Datei-API-Spezifikation nicht haben würde Alle Werte über 255 (Sie haben zwei individuelle Zeichen für die beiden Bytes des Unicode-Codepunkts). Wenn youre das Lesen einer Datei, die nicht Text überhaupt (ein Bild, vielleicht), youll wahrscheinlich noch ein sehr ähnliches Ergebnis zwischen readAsText und readAsBinaryString. Aber mit readAsBinaryString Sie wissen, dass es keinen Versuch, Multi-Byte-Sequenzen als Zeichen interpretieren wird. Sie wissen nicht, dass, wenn Sie readAsText verwenden. Da readAsText eine Codierungsbestimmung verwendet, um herauszufinden, was die Dateiencodierung ist, und sie dann zu JavaScripts UTF-16-Zeichenfolgen abbilden. Sie können den Effekt sehen, wenn Sie eine Datei erstellen und in etwas anderem als ASCII oder UTF-8 speichern. (In Windows können Sie dies über Notepad das Speichern unter als eine Kodierung Dropdown-Liste mit Unicode auf, indem sie die Daten betrachten sie scheinen UTF-16 Im sicher, dass Mac OS und Nix-Editoren haben eine ähnliche Funktion.) Heres eine Seite, die das Ergebnis des Lesens eine Datei in beide Richtungen Dumps: Wenn ich mit einem Test 1 2 3 Datei in UTF-16 gespeichert, hier sind die Ergebnisse, die ich bekommen verwenden, dass: Wie Sie sehen können, readAsText die Zeichen interpretiert und so bekam ich 13 (die Länge von Testing 1 2 3) und readAsBinaryString didnt, und so bekam ich 28 (die Zwei-Byte-Stückliste plus zwei Bytes für jedes Zeichen). XMLHttpRequest. response mit responseArrayBuffer wird in HTML 5 unterstützt JavaScript-Strings sind UTF-16 wie eine seltsame Aussage scheinen mag Arent sie Unicode Nein, nur eine JavaScript-String ist eine Reihe von UTF-16 Code-Einheiten Sie Ersatzpaare als zwei einzelne JavaScript sehen Zeichen, obwohl das Surrogatpaar insgesamt nur ein Zeichen ist. Siehe den Link für Details. DigitalFresh: Die Zeichenfolge ist die Binärdaten. Wie Sie kommentiert haben, schrieb ich ein Beispiel, das helfen kann. JavaScript doesn39t haben einen quotbinaryquot-Typ und so gingen sie mit einem String mit der Garantie, dass kein Zeichen, das im String gespeichert ist, außerhalb des Bereichs 0..255 sein würde. (Sie könnten mit einem Array von Zahlen statt, aber sie didn39t gegangen haben.) Das Beispiel zeigt, wie Sie den Rohwert eines quotcharacterquot aus der Zeichenfolge zu erhalten. Ndash T. J. Crowder morpheus: Da dieses Zeug asynchron ist, kann es keine Ausnahmen zu werfen, die Sie benötigen, um die Schnittstelle zu sehen, ob there39s einige asynchrone Weise berichtet es Fehler. Und tatsächlich hat FileReader dafür einen Fehler. Wenn Sie eine Datei verwenden: 4747 URL, ist Ihre Dokument-Domain null, die dazu neigt, Sie aus einer Menge von Dingen (ich don39t wissen, die Details, ich nie tun), esp. Wenn die SOP hineingeht. I39m ziemlich sicher it39s bis zum Browser, zumindest für jetzt, da die Sicherheit Teil der Spezifikation ist noch vorläufig: w3.org/TR/FileAPI/security-discussion Aber ich wouldn39t erwarten, dass es funktioniert. Ndash T. J. Crowder 5. November 10 um 18:12 Uhr Vielen Dank TJCrowder - ich meinen Kommentar gelöscht, andere von der durch meine starke Vereinfachung die Irre geführt zu werden, und danke für die Details veröffentlichen - ich bin sicher, dass andere Ihre Kommentare viel hilfreicher finden (und das Lesen der Artikel ist wirklich eine gute Idee, wie Sie sagen, wenn man mucking around in diesem Bereich). Ndash Brian M. Hunt Dez 30 14 um 14: 16jDataView bietet eine Standard-Möglichkeit, binäre Dateien in allen Browsern zu lesen. Es folgt der DataView Spezifikation und sogar erweitert es für eine praktische Anwendung. Erläuterung Es gibt drei Möglichkeiten, eine Binärdatei aus dem Browser zu lesen. Das erste ist, um die Datei über XHR mit charsetx-benutzerdefiniert herunterzuladen. Sie erhalten die Datei als String. Und Sie müssen alle Decodierungsfunktionen (getUint16, getFloat32.) Neu schreiben. Alle Browser unterstützen dies. Dann haben Browser, die WebGL implementierten, auch ArrayBuffers hinzugefügt. Es ist ein einfacher Puffer, der mit Ansichten gelesen werden kann, die als TypedArrays (Int32Array, Float64Array.) Bezeichnet werden. Sie können sie verwenden, um die Datei zu decodieren, aber das ist nicht sehr praktisch. Es hat großen Nachteil, es kann nicht lesen, nicht-ausgerichtete Daten. Es wird von Firefox 4 und Chrome 7 unterstützt. Eine neue Revision der Spezifikation hinzugefügt DataViews. Es ist eine Ansicht um Ihren Puffer, der willkürliche Datentypen direkt durch Funktionen lesen kann: getUint32, getFloat64. Nur Chrome 9 unterstützt es. JDataView bietet die DataView-API für alle Browser mit der besten verfügbaren Option zwischen Strings, TypedArrays und DataViews. Siehe die Spezifikation für eine detaillierte API. Khronos. org/registry/webgl/doc/spec/TypedArray-spec. html6. Jeder für DataView geschriebene Code funktioniert mit jDataView (außer wenn er etwas schreibt). Konstruktor new jDataView (Puffer, Offset, Länge). Puffer kann entweder ein String oder ein ArrayBuffer Specification API sein. Der Wrapper erfüllt alle Spezifikations-Getter. getInt8 (byteOffset) getUint8 (byteOffset) GetInt16 (byteOffset, littleEndian) GetUInt16 (byteOffset, littleEndian) GetInt32 (byteOffset, littleEndian) GetUInt32 (byteOffset, littleEndian) getFloat32 (byteOffset, littleEndian) getFloat64 ist (byteOffset, littleEndian) Erweiterte Spezifikation Der byteOffset Parameter Jetzt optional. Wenn Sie es überspringen, wird es direkt nach dem letzten Lese-Offset zu lesen. Sie können mit den internen Zeiger mit diesen beiden Funktionen interagieren. Seek (byteOffset): Verschiebt den internen Pointer auf die Position tell (): Liefert die aktuelle Position Addition der getChar - und getString-Utilities. Hinzufügen von createBuffer, einem Dienstprogramm zum einfachen Erstellen von Pufferspeichern mit dem neuesten verfügbaren Speichertyp (String oder ArrayBuffer). Unzulänglichkeiten Nur das Lese-API wird verpackt, jDataView bietet keine Set-Methode. Die Float64-Implementierung auf Strings hat nicht die volle Präzision. Zuerst brauchen wir eine Datei. Entweder erhalten Sie es durch XHR oder verwenden Sie das Dienstprogramm createBuffer.

No comments:

Post a Comment