Wie können Sie eine Zeichenfolge in JavaScript in Base64 codieren?
Ich habe ein PHP-Skript, das codieren kann ein PNG-Bild in eine Base64-Zeichenkette.
Ich würde gerne das gleiche zu tun, mit JavaScript. Ich weiß, wie, um Dateien zu öffnen, aber ich bin mir nicht sicher, wie man die Codierung? Ich bin nicht verwendet, um arbeiten mit binären Daten.
InformationsquelleAutor der Frage username | 2008-10-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
btoa()
undatob()
konvertieren zu und von base64-Codierung.Scheint es einige Verwirrung in den Kommentaren über das, was diese Funktionen übernehmen/zurückgeben, so...
btoa()
akzeptiert ein "string", wobei jedes Zeichen stellt eine 8-bit-byte–, wenn Sie eine Zeichenfolge übergeben, die Zeichen enthalten, können nicht dargestellt werden in 8 bits, es wird wahrscheinlich brechen. Dies ist nicht ein problem wenn Sie tatsächlich die Behandlung von Strings als byte-array, aber wenn Sie versuchen, etwas anderes zu tun, dann haben Sie codieren Sie es zuerst.atob()
gibt einen "string", wobei jedes Zeichen stellt eine 8-bit-byte, dessen Wert wird zwischen0
und0xff
. Dies gilt nicht meine, es ist ASCII – vermutlich, wenn Sie diese Funktion bei allen, die Sie erwarten, zu sein, das arbeiten mit Binär-Daten und nicht text.Siehe auch:
InformationsquelleAutor der Antwort Shog9
Von hier aus:
Auch, Suche auf "javascript-base64-Codierung" stellt eine Menge anderer Optionen, das oben war der erste.
InformationsquelleAutor der Antwort Sunny Milenov
Sunny ' s code ist großartig, außer es bricht im IE7, weil der verweist auf "dieses". Behoben durch Ersatz solcher Verweise, die mit "Base64":
InformationsquelleAutor der Antwort user850789
Können Sie
btoa
(base-64) undatob
(aus base-64).IE 9 und unten, versuchen die jquery-base64 plugin:
InformationsquelleAutor der Antwort Vitalii Fedorenko
Internet Explorer 10+
Cross-Browser -
jsFiddle
mit Node.js
Hier ist, wie kodiert man normalen text in base64 Node.js:
Und hier ist, wie Sie Dekodieren von base64-kodierten strings:
mit Dojo.js
Codieren, ein array von bytes mit dojox.- Codierung.base64:
Dekodieren einer base64-kodierten string:
bower installieren eckig-base64
InformationsquelleAutor der Antwort davidcondrey
Gibt es ein paar bugs in beiden Implementierungen
_utf8_decode
.c1
undc2
zugeordnet sind als Globale Variablen aufgrund defekter Nutzung dervar
- Anweisung, undc3
ist nicht initialisiert oder deklariert alle.Funktioniert es, aber diese Variablen werden überschrieben, vorhandene mit dem gleichen Namen außerhalb dieser Funktion.
Hier eine version, die nicht diese:
InformationsquelleAutor der Antwort robbles
I +1 'ed Sunny' s Antwort, aber ich wollte dazu beitragen wieder ein paar änderungen, die ich für mein eigenes Projekt im Falle dass jemand es nützlich finden. Im Grunde habe ich nur gereinigt, bis der ursprüngliche code ein wenig, so dass JSLint nicht beschweren, ganz so viel, und ich die Methoden, die als private markiert in den Kommentaren tatsächlich private. Ich habe auch zwei Methoden, die ich brauchte in mein eigenes Projekt, nämlich
decodeToHex
undencodeFromHex
.Code:
InformationsquelleAutor der Antwort Joe Dyndale
Habe ich wieder schrieb per hand, haben diese Kodierung und Dekodierung von Methoden mit Ausnahme der hexadezimale man in einem modularen format für cross-Plattform - /browser-Kompatibilität und auch mit echten privaten scoping und verwendet
btoa
undatob
wenn Sie vorhanden sind, aufgrund der Geschwindigkeit eher als die Verwendung seines eigenen Codierung:https://gist.github.com/Nijikokun/5192472
Verwendung:
InformationsquelleAutor der Antwort Nijikokun
Machen, die eine Base64-codierte Zeichenfolge URL-freundlich, in JavaScript könnte man etwas wie das hier tun:
Siehe auch diese Geige: http://jsfiddle.net/magikMaker/7bjaT/
InformationsquelleAutor der Antwort magikMaker
wenn Sie brauchen, um zu Kodieren von HTML-image-Objekt,
Sie können schreiben Sie einfachen Funktion wie:
Bekommen base64 Bild-id:
mehr hier
InformationsquelleAutor der Antwort Nedudi
Bitte beachten Sie, dass dies eignet sich nicht für die roh-Unicode-Zeichenfolgen! Siehe Unicode-Abschnitt hier.
Syntax für die Kodierung von
var encodedData = window.btoa(stringToEncode);
Syntax für die Decodierung
var decodedData = window.atob(encodedData);
InformationsquelleAutor der Antwort Kathir
Diese Frage und die Antworten wies mich in die richtige Richtung.
Vor allem mit unicode-atob und btoa kann nicht verwendet werden "Vanille" und in diesen Tagen ist ALLES unicode ..
Direkt von Mozilla, zwei nette Funktionen für diesen Zweck (getestet mit unicode-und html-tags innen)
Diese Funktionen ausführen, Blitz schnell im Vergleich zu raw-base64-Decodierung mithilfe einer benutzerdefinierten javascript-Funktion als btoa und atob ausgeführt werden, die außerhalb der Dolmetscher.
Wenn Sie ignorieren können, die alten IE und alten Handys (wie iphone 3?) dies sollte eine gute Lösung sein.
InformationsquelleAutor der Antwort John
Beitrag mit einer minified polyfill für
window.atob
+window.btoa
ich bin derzeit mit.InformationsquelleAutor der Antwort Johan
Ich würde lieber die bas64 encode/decode Methoden aus CryptoJSdie beliebteste Bibliothek für standard-und sichere kryptographische algorithmen implementiert in JavaScript mithilfe von best practices und Muster.
InformationsquelleAutor der Antwort Dan Dascalescu
Hier ist ein AngularJS Factory-version von @user850789 ist eines:
InformationsquelleAutor der Antwort A T
Brauchte ich die Codierung von UTF-8-Zeichenkette als base64-für ein Projekt von mir. Die meisten Antworten hier scheinen nicht richtig zu handhaben, UTF-16-Ersatzzeichen Paaren, wenn die Konvertierung zu UTF-8 so, für die Vollendung Willen, ich poste meine Lösung:
Beachten Sie, dass der code ist nicht getestet. Getestet habe ich einige Eingaben, einschließlich Dinge wie
strToUTF8Base64('衠衢蠩蠨')
und im Vergleich mit der Ausgabe eines online-encoding-tool (https://www.base64encode.org/).InformationsquelleAutor der Antwort Ricardo Machado
Für mein Projekt brauche ich noch an Unterstützung von IE7 und arbeiten mit großen Eingang zu Kodieren.
Basierend auf der code-vorgeschlagen von Joe Dyndale und wie vorgeschlagen im Kommentar von Marius, ist es möglich, die Leistung zu verbessern mit IE7, indem er das Ergebnis in einem array statt einer Zeichenkette.
Hier ist das Beispiel für encode:
InformationsquelleAutor der Antwort Nico
Gut, wenn Sie mit dojo, gibt es uns den direkten Weg zu codieren oder zu decodieren, die in base64.
Versuchen Sie dies:-
Codieren, ein array von bytes mit dojox.- Codierung.base64:
Dekodieren einer base64-kodierten string:
InformationsquelleAutor der Antwort Vikash Pandey
Zwar ein bisschen mehr Arbeit, wenn Sie möchten, eine high-performance-native Lösung gibt es einige HTML5-Funktionen, die Sie verwenden können.
Wenn Sie Ihre Daten in eine
Blob
dann können Sie die FileReader.readAsDataURL() - Funktion, um einedata://
URL und hacken Sie die Vorderseite der es um den base64-Daten.Können Sie tun, die weitere Bearbeitung jedoch zu urldecode die Daten, da bin ich mir nicht sicher, ob
+
Zeichen werden escaped oder nicht für diedata://
URL, aber das sollte ziemlich trivial.InformationsquelleAutor der Antwort Malvineous