JavaScript BinaryString, String, Base64 und Zeichenkette
Wie JavaScript intern zwischen String und BinaryString unterscheidet
- Abstrakte Datentypen in c deklarieren und in Dateien speichern
- Aggregation und Delegation sinnvoll nutzen für Objektübergreifenden Datenaustausch
- Beginn und Ende der Sommerzeit berechnen mit Perl
- Berechnen der Zeitzone mit Perl
- Binary und UTF-8 in MySQL Tabellen speichern
- Binärdatei mit Perl erzeugen und mit c auslesen
- Bitoperatoren in Perl
- Blüten in der objektorientierten Programmierung
- C Testseite im Perl-Framework
- CGI/1.1 Der Standard Common Gateway Interface
- CPAN Module Device::USB für Win32 compilieren und installieren
- Das error_log ist definitiv kein Entwicklerwerkzeug
- Dateien dienen nicht der Präsentation der Daten sondern dem Transport
- Dateinamen in UTF-8 auf beliebigen Betriebssystemen
- Datentypen haben plattformübergreifend dieselbe Byte-Länge
- Datum als lange Zählung und Uhrzeit in dezimaler Darstellung
- Der letzte Rest: GET, PUT, POST, DELETE ...
- Der richtige Umgang mit Binaries in C und in Perl
- Die Multi-Media-Mail-Datei der Zukunft, SMS, MMS, Internet-Mail
- Drucken auf einen Netzwerkdrucker mit Perl
- Ein eigenes Forum programmieren, Zustandsmodell einer Webanwendung
- Exceptions vereinfachen die Prüfung über Kontrollstrukturen
- Ganze Zahlen in Dateien Schreiben in Programmiersprachen c, Perl usw.
- Globale Variablen der main-Class in einem Objekt bündeln
- HTTP/1.1 Multiple Request, Persistent Connection und Pipelining
- Interne Zeichenkodierung, Characters, Bytes und Bytesemantics
- JavaScript BinaryString, String, Base64 und Zeichenkette
- Julianischen und Gregorianischen Kalender berechnen mit C
- Just another OOP Tutorial for Perl
- Little Endian, Big Endian
- Locken von Dateien für atomare Lese- und Schreibzugriffe
- Modern Perl, Modern Style, Perl OOP, TDD
- MyDBI auf dem Weg zu einer eigenen Klassenhierarchie
- Nameserver-Abfragen, UDP mit Perl und mit C
- PHP serialize, unserialize ineffizient
- Perl OOP: Getter automatisieren ohne Gettermethoden zu definieren
- Perl's Exception::Class oder Exceptions klassifizieren
- Perl-Äquivalent zu PHP __toString()
- Perl5 OOP Overload und für was das gut ist
- Perl6 Perls Zukunft oder ein totgeborenes Kind
- Perl: Dependency Injection als Design Pattern
- Perl: Referenzen auf Variablen und Funktionen
- PerlDoc ausgewählte Module und Perl FAQ
- Perldoc Online, alle Perl-Funktionen per Klick erklären
- RFC gerechte Formate für Datum und Zeit
- Random Access, Persistenz und ein Schichtenmodell
- Rechnen mit IPv4-Adressen in Programmiersprache c
- Serialize Algorithmen leicht verständlich, Binary safe Read and Write
- Simple Mail Transfer Protocol einfach erklärt
- Transformation von Datenstrukturen für eine transportgerechte Verpackung
- Warum ein Data Abstraction Layer
- Webformulare und Fehlerbehandlung beim Senden der Daten mit Ajax
- XML und der Unsinn, Random Access auf Dateiebene abzubilden
- Unicode, ein System zur Verwaltung von Zeichen
JavaScript unterscheidet, ähnlich wie Perl, intern zwischen Zeichenketten und Bytesequenzen. Tabelle und Code untenstehend verdeutlichen diesen Sachverhalt. Ausgehend von den Zeichen 'äöü' die hierzu UTF-8 kodiert vorliegen, werden diese einmal als Zeichenkette (String) und zum Anderen als Bytesequenz (BinaryString) innerhalb JavaScript aufgefasst.
So liefert die JavaScript-Funktion charCodeAt()
im ersten Fall den Codepoint für das jeweilige Zeichen, im zweiten Fall jedoch die Bytewertigkeit der jeweiligen Oktette (Byte).
äöü als String und als BinaryString |
Copepoints in Zeichenkette |
|
|
|
Bytewertigkeiten in BinaryString |
|
|
|
|
|
|
Gut zu sehen also, daß der Index über einen BinaryString eben über die Bytes läuft, in einer Zeichenkette hingegen läuft der Index über die Zeichen.
Das dazugehörige JavaScript
Anmerkung: Die Funktion charCodeAt()
liefert die Wertigkeiten beliebiger Bytes. Die Umkehrfunktion dazu ist String.fromCharCode(oktettenwertigkeit)
womit genau ein Byte erzeugt wird.
Die hier vorgestellete Funktion zstr2bstr(str)
geht auf eine Empfehlung von MDN zurück, Link siehe obenstehend und funktioniert nur mit UTF-kodierten Zeichenketten was dem Einsatz von encodeURIComponent(str)
geschuldet ist und natürlich ist das mehr als ein Kompromiss.
Wenn die Datenquelle jedoch ein Blob
ist, wird zweckmäßigerweise FileReader.readAsBinaryString()
verwendet. Und schließlich lässt sich ein Binary String auch aus einem ArrayBuffer
heraus erzeugen.
Base64
Die Builtin-Funktion window.btoa(str)
funktioniert einwandfei wenn eine in str
vorliegende Binary zu einem Binary String aufgearbeitet wurde. Hierzu eine erprobte Funktion, sie erzeugt aus einen ArrayBuffer
eine Binary
:
// Arraybuffer to BinaryString
function ab2str(ab){
var dv = new DataView(ab);
var offs = 0;
var binstr = '';
while (offs < dv.byteLength ){
binstr += String.fromCharCode(dv.getUint8(offs));
offs += 1;
}
return binstr;
}
Die rein persönlichen Zwecken dienende Seite verwendet funktionsbedingt einen Session-Cookie. Datenschutzerklärung:
Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. @: nmqrstx-18@yahoo.de