Ich habe ein PHP-Skript, das ein PNG-Bild in eine Base64-Zeichenfolge codieren kann.
Ich möchte dasselbe mit JavaScript tun. Ich weiß, wie man Dateien öffnet, bin mir aber nicht sicher, wie ich die Codierung durchführen soll. Ich bin es nicht gewohnt, mit Binärdaten zu arbeiten.
javascript
base64
Nutzername
quelle
quelle
Antworten:
Sie können die Base64-Codierung verwenden
btoa()
undatob()
in diese konvertieren.In den Kommentaren scheint es einige Verwirrung darüber zu geben, was diese Funktionen akzeptieren / zurückgeben, also ...
btoa()
Akzeptiert eine „Zeichenfolge“, in der jedes Zeichen ein 8-Bit-Byte darstellt. Wenn Sie eine Zeichenfolge übergeben, die Zeichen enthält, die nicht in 8 Bit dargestellt werden können, wird sie wahrscheinlich unterbrochen . Dies ist kein Problem, wenn Sie die Zeichenfolge tatsächlich als Byte-Array behandeln. Wenn Sie jedoch versuchen, etwas anderes zu tun, müssen Sie sie zuerst codieren.atob()
Gibt eine „Zeichenfolge“ zurück, in der jedes Zeichen ein 8-Bit-Byte darstellt. Das heißt, sein Wert liegt zwischen0
und0xff
. Dies bedeutet nicht, dass es sich um ASCII handelt. Wenn Sie diese Funktion überhaupt verwenden, erwarten Sie vermutlich, dass Sie mit Binärdaten und nicht mit Text arbeiten.Siehe auch:
quelle
btoa(unescape(encodeURIComponent(str))))
wenn str UFT8 istVon hier aus :
Auch die Suche nach "Javascript Base64-Codierung" bietet viele andere Optionen, die oben genannte war die erste.
quelle
string = string.replace(/\r\n/g,"\n");
Anweisung in der utf8-Codierungsmethode zu entfernen .string = string.replace(/\r\n/g,"\n");
, lol. Es ist wie "Oh, lassen Sie uns diese Zeichenfolge codieren, aber warum normalisieren wir nicht einfach alle Zeilenumbrüche ohne guten Grund zufällig". Das sollte unter allen Umständen unbedingt aus der Klasse entfernt werden.enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
. In meinem Browser funktioniert das in Ordnung,NaN>>4
gleich 0, aber ich weiß nicht, ob alle Browser dies tun (NaN/16
entspricht auch NaN).Internet Explorer 10+
Browserübergreifend
jsFiddle
mit Node.js.
So codieren Sie normalen Text in base64 in Node.js:
Und so dekodieren Sie Base64-codierte Zeichenfolgen:
mit Dojo.js
So codieren Sie ein Array von Bytes mit dojox.encoding.base64:
So dekodieren Sie eine Base64-codierte Zeichenfolge:
Laube eckig-base64 einbauen
quelle
Sunnys Code ist großartig, außer dass er in IE7 aufgrund von Verweisen auf "this" kaputt geht. Behoben durch Ersetzen solcher Referenzen durch "Base64":
quelle
Sie können
btoa
(von base-64) undatob
(von base-64) verwenden.Probieren Sie für IE 9 und niedriger das Plugin jquery-base64 aus :
quelle
base64.encode(...)
undbase64.decode(...)
... das Anhängen an jQuery, wenn es keine jQuery-spezifische Funktionalität hat, macht absolut keinen Sinn ...In den Kommentaren (von SET und Stefan Steiger) unter der akzeptierten Antwort finden Sie eine kurze Zusammenfassung, wie Sie einen String zu / von base64 codieren / decodieren, ohne eine Bibliothek zu benötigen.
Demo
(Verwendet die jQuery-Bibliothek, jedoch nicht zum Codieren / Decodieren)
Code-Snippet anzeigen
quelle
Buffer.from(b64data, 'base64').toString();
Es gibt ein paar Fehler in beiden Implementierungen von
_utf8_decode
.c1
undc2
werden aufgrund der fehlerhaften Verwendung dervar
Anweisung als globale Variablen zugewiesen und überhauptc3
nicht initialisiert oder deklariert.Es funktioniert, aber diese Variablen überschreiben alle vorhandenen Variablen mit demselben Namen außerhalb dieser Funktion.
Hier ist eine Version, die dies nicht tut:
quelle
Ich habe Sunnys Antwort beantwortet, aber ich wollte ein paar Änderungen zurückbringen, die ich für mein eigenes Projekt vorgenommen habe, falls jemand es nützlich finden sollte. Grundsätzlich habe ich den ursprünglichen Code nur ein wenig aufgeräumt, damit sich JSLint nicht so sehr beschwert, und ich habe die Methoden, die in den Kommentaren als privat markiert sind, tatsächlich privat gemacht. Ich habe auch zwei Methoden hinzugefügt, die ich in meinem eigenen Projekt brauchte, nämlich
decodeToHex
undencodeFromHex
.Der Code:
quelle
Für neuere Browser, die Uint8Array als Zeichenfolge codieren und die Zeichenfolge als Zeichenfolge für Uint8Array dekodieren.
Für Node.js können Sie Folgendes verwenden, um Zeichenfolge, Puffer oder Uint8Array in Zeichenfolge zu codieren und von Zeichenfolge, Puffer oder Uint8Array in Puffer zu dekodieren.
quelle
Um eine Base64-codierte String-URL benutzerfreundlich zu gestalten, können Sie in JavaScript Folgendes tun:
Siehe auch diese Geige: http://jsfiddle.net/magikMaker/7bjaT/
quelle
encodeURIComponent
durchaus zu einem überlegenen Ergebnis mit weniger Aufwand seitens des Entwicklers führen kann.Bitte beachten Sie, dass dies nicht für rohe Unicode-Strings geeignet ist! Siehe Unicode-Abschnitt hier .
Syntax für die Codierung
var encodedData = window.btoa(stringToEncode);
Syntax zum Decodieren
var decodedData = window.atob(encodedData);
quelle
Ich habe diese Kodierungs- und Dekodierungsmethoden mit Ausnahme der hexadezimalen Methode von Hand in ein modulares Format umgeschrieben, um sie plattformübergreifend / browserkompatibel und auch mit echtem privatem Umfang und Verwendungszwecken zu verwenden,
btoa
undatob
wenn sie aufgrund der Geschwindigkeit existieren, anstatt sie zu nutzen seine eigene Kodierung:https://gist.github.com/Nijikokun/5192472
Verwendungszweck:
quelle
Diese Frage und ihre Antworten haben mich in die richtige Richtung gelenkt.
Besonders mit Unicode Atob und Btoa kann nicht "Vanille" verwendet werden und heutzutage ist ALLES Unicode ..
Direkt von Mozilla, zwei nette Funktionen für diesen Zweck (getestet mit Unicode- und HTML-Tags im Inneren)
Diese Funktionen werden im Vergleich zur rohen Base64-Decodierung mit einer benutzerdefinierten Javascript-Funktion blitzschnell ausgeführt, da btoa und atob außerhalb des Interpreters ausgeführt werden.
Wenn Sie alten Internet Explorer und alte Mobiltelefone (wie iPhone 3?) Ignorieren können, sollte dies eine gute Lösung sein.
quelle
Wenn Sie ein HTML-Bildobjekt codieren müssen, können Sie einfache Funktionen wie die folgenden schreiben:
So erhalten Sie base64 des Bildes anhand der ID:
mehr hier
quelle
Beitrag mit einer minimierten Polyfüllung für
window.atob
+window.btoa
, die ich derzeit verwende.quelle
Ich würde lieber die bas64-Codierungs- / Decodierungsmethoden von CryptoJS verwenden , der beliebtesten Bibliothek für standardmäßige und sichere kryptografische Algorithmen, die in JavaScript unter Verwendung von Best Practices und Mustern implementiert sind.
quelle
Hier ist eine AngularJS Factory-Version von @ user850789:
quelle
Ich brauchte die Codierung eines UTF-8-Strings als base64 für ein Projekt von mir. Die meisten Antworten hier scheinen UTF-16-Ersatzpaare bei der Konvertierung in UTF-8 nicht richtig zu behandeln. Aus Gründen der Vervollständigung werde ich meine Lösung veröffentlichen:
Beachten Sie, dass der Code nicht gründlich getestet wurde. Ich habe einige Eingaben getestet, darunter Dinge wie
strToUTF8Base64('衠衢蠩蠨')
und verglichen mit der Ausgabe eines Online-Codierungstools ( https://www.base64encode.org/ ).quelle
Für mein Projekt muss ich noch IE7 unterstützen und mit großen Eingaben arbeiten, um zu codieren.
Basierend auf dem von Joe Dyndale vorgeschlagenen Code und dem Kommentar von Marius ist es möglich, die Leistung mit IE7 zu verbessern, indem das Ergebnis mit einem Array anstelle eines Strings erstellt wird.
Hier ist das Beispiel für die Codierung:
quelle
Wenn Sie eine native Hochleistungslösung wünschen, können Sie einige HTML5-Funktionen verwenden.
Wenn Sie Ihre Daten in a übertragen können
Blob
, können Sie mit der Funktion FileReader.readAsDataURL () einedata://
URL abrufen und die Vorderseite abhacken, um an die base64-Daten zu gelangen.Möglicherweise müssen Sie jedoch eine weitere Verarbeitung durchführen, um die Daten zu urldecodieren, da ich nicht sicher bin, ob
+
Zeichen für diedata://
URL maskiert sind oder nicht , aber dies sollte ziemlich trivial sein.quelle
Wenn Sie Dojo verwenden, können wir direkt in base64 codieren oder decodieren.
Versuche dies:-
So codieren Sie ein Array von Bytes mit dojox.encoding.base64:
So dekodieren Sie eine Base64-codierte Zeichenfolge:
quelle
Sie können verwenden
window.btoa
undwindow.atob
...Wahrscheinlich kann die Verwendung der Art und Weise, wie MDN ist, Ihre Arbeit am besten erledigen ... Auch das Akzeptieren von Unicode ... mithilfe dieser beiden einfachen Funktionen:
quelle
Hier ist eine LIVE DEMO von
atob()
undbtoa()
JS integrierte Funktionen:quelle
Verwenden Sie die js-base64-Bibliothek als
quelle