dedlfix: Binary String verarbeiten

Beitrag lesen

Tach!

FileReader.readAsBinaryString(blob) erzeugt eine Bytesquenz, siehe CODE obenstehend.

Nein, typeof theFileReaderInstance.result liefert: string. Das ist in Javascript keine Bytesequenz.

Das was in result vom FileReader steht ist jedenfalls ein Javascript-String.

Es ist eine Bytesequenz.

Nein, typeof theFileReaderInstance.result liefert: string. Das ist in Javascript keine Bytesequenz.

Diese enthalten nur Unicode-Zeichen,

völlig falsch.

Ja, aber mir scheint, dass das Verständnisproblem auf deiner Seite liegt.

Wenn ich meinen Binstring byteweise durchgehe bekomme ich einzelne Bytes mit Wertigkeiten von 0..255.

Wie machst du denn das konket, und besonders ohne den nicht existenten Datentyp Byte?

Man kann auch für Unicode-Zeichen nur die Wertigkeiten 0..255 erhalten, wenn nur Zeichen aus diesem Bereich im String sind.

Unicodezeichen hingegen können aus mehreren Bytes bestehen.

Tun sie aber in dem Fall nicht. FileReader.readAsBinaryString() schreibt nur die Zeichen mit den CodePoints 0..255 in das Ergebnis. Das sieht nur aus wie Bytes, ist es aber nicht. Das heißt, aus wievielen Bytes die Zeichen intern bestehen, kannst du sowieso nicht sehen. Du bekommst lediglich irgendwas basierend auf ihrem CodePoint.

Wie auch immer

for(i=0;i<bin.length;i++){
   console.log( bin[i].codePointAt(), escape(bin[i]) );
}

liefert mir die richtige Bytewertigkeiten.

Jein, es liefert die CodePoints der Unicode-Zeichen, die passen aber anderenorts in den Datentyp Byte, weil, wie gesagt, nur die Zeichen mit den CodePoints 0..255 in deinem bin liegen. Damit ist dein Ziel erreicht, aber die Arbeitsweise ist eine andere, als du hier zu erkennen glaubst. Da wird mitnichten byteweise gearbeitet sondern zeichenweise, genauer gesagt mit String mit Inhalt von einem Zeichen. Schau es dir an, was typeof bin[i] liefert: string.

Javascript ist nicht angetreten, um unterhalb von Zeichen und Number zu operieren.

Mit diesen Bytewertigkeiten kann ich ein Uint8Array erstellen. Damit einen ArrayBuffer und damit die Grafik wiederherstellen.

Mit Unicode hat das alles nichts zu tun.

Oh doch. Das was du außen siehst, kann letzlich nur mit den primitiven Datentypen von Javascript dargestellt werden: String, Number, (und weitere, hier nicht wichtige). Byte ist jedenfalls nicht darunter. Es gibt noch nicht einmal einen eigenen Typ für Zeichen, das ist lediglich ein String mit einem Zeichen Inhalt. String ist jedenfalls eine Sequenz von Unicode-Zeichen. Was es intern ist, ist für Javascript nicht weiter relevant, das sind Implementierungsdetails der jeweiligen Javascript-Engine.

dedlfix.