J'ai un script PHP qui peut encoder une image PNG en une chaîne Base64.
Je voudrais faire la même chose en utilisant JavaScript. Je sais comment ouvrir des fichiers, mais je ne sais pas comment faire l'encodage. Je n'ai pas l'habitude de travailler avec des données binaires.
javascript
base64
Nom d'utilisateur
la source
la source
Réponses:
Vous pouvez utiliser
btoa()
etatob()
pour convertir vers et depuis l'encodage base64.Il semble y avoir une certaine confusion dans les commentaires concernant ce que ces fonctions acceptent / renvoient, donc…
btoa()
accepte une «chaîne» où chaque caractère représente un octet de 8 bits - si vous passez une chaîne contenant des caractères qui ne peuvent pas être représentés sur 8 bits, elle se cassera probablement . Ce n'est pas un problème si vous traitez réellement la chaîne comme un tableau d'octets, mais si vous essayez de faire autre chose, vous devrez d'abord la coder.atob()
renvoie une «chaîne» où chaque caractère représente un octet de 8 bits - c'est-à-dire que sa valeur sera comprise entre0
et0xff
. Cela ne signifie pas que c'est ASCII - probablement si vous utilisez cette fonction, vous vous attendez à travailler avec des données binaires et non du texte.Voir également:
la source
btoa(unescape(encodeURIComponent(str))))
si str est UFT8D'ici :
De plus, la recherche sur "l'encodage javascript base64" donne lieu à de nombreuses autres options, la précédente était la première.
la source
string = string.replace(/\r\n/g,"\n");
instruction discutable dans la méthode de codage utf8.string = string.replace(/\r\n/g,"\n");
en premier lieu, lol. C'est comme "oh, laisse encoder cette chaîne, mais d'abord, pourquoi ne normalisons-nous pas au hasard tous les sauts de ligne sans aucune bonne raison". Cela devrait absolument être retiré de la classe en toutes circonstances.enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
. Dans mon navigateur, cela fonctionne bien,NaN>>4
est égal à 0, mais je ne sais pas si tous les navigateurs le font (également,NaN/16
égal à NaN).Internet Explorer 10+
Navigateur croisé
jsFiddle
avec Node.js
Voici comment vous encodez du texte normal en base64 dans Node.js:
Et voici comment décoder les chaînes encodées en base64:
avec Dojo.js
Pour coder un tableau d'octets à l'aide de dojox.encoding.base64:
Pour décoder une chaîne codée en base64:
bower install angular-base64
la source
Le code de Sunny est génial sauf qu'il casse dans IE7 à cause des références à "ceci". Corrigé en remplaçant ces références par "Base64":
la source
Vous pouvez utiliser
btoa
(à base-64) etatob
(à partir de base-64).Pour IE 9 et versions antérieures , essayez le plugin jquery-base64 :
la source
base64.encode(...)
etbase64.decode(...)
... de l'attacher à jQuery quand il n'a aucune fonctionnalité spécifique à jQuery n'a absolument aucun sens ...À partir des commentaires (par SET et Stefan Steiger) sous la réponse acceptée, voici un bref résumé de la façon d'encoder / décoder une chaîne vers / depuis base64 sans avoir besoin d'une bibliothèque.
Démo
(utilise la bibliothèque jQuery, mais pas pour encoder / décoder)
Afficher l'extrait de code
la source
Buffer.from(b64data, 'base64').toString();
Il y a quelques bogues dans les deux implémentations de
_utf8_decode
.c1
etc2
sont affectés en tant que variables globales en raison d'une utilisation non conforme de l'var
instruction, etc3
ne sont pas du tout initialisés ou déclarés.Cela fonctionne, mais ces variables remplaceront toutes celles existantes avec le même nom en dehors de cette fonction.
Voici une version qui ne fera pas ça:
la source
J'ai + 1 la réponse de Sunny, mais je voulais apporter quelques modifications que j'ai apportées à mon propre projet au cas où quelqu'un le trouverait utile. Fondamentalement, je viens de nettoyer un peu le code d'origine afin que JSLint ne se plaigne pas autant, et j'ai rendu les méthodes marquées comme privées dans les commentaires réellement privées. J'ai également ajouté deux méthodes dont j'avais besoin dans mon propre projet, à savoir
decodeToHex
etencodeFromHex
.Le code:
la source
Pour les navigateurs plus récents, encoder Uint8Array en chaîne et décoder la chaîne en Uint8Array.
Pour Node.js, vous pouvez utiliser ce qui suit pour coder une chaîne, un tampon ou Uint8Array en chaîne et décoder de chaîne, tampon ou Uint8Array en tampon.
la source
Pour rendre une URL de chaîne encodée en Base64 conviviale, en JavaScript, vous pouvez faire quelque chose comme ceci:
Voir aussi ce violon: http://jsfiddle.net/magikMaker/7bjaT/
la source
encodeURIComponent
pourrait bien aboutir à un résultat supérieur avec moins de dépenses d'effort de la part du développeur.Veuillez noter que cela ne convient pas aux chaînes Unicode brutes! Voir la section Unicode ici .
Syntaxe de codage
var encodedData = window.btoa(stringToEncode);
Syntaxe de décodage
var decodedData = window.atob(encodedData);
la source
J'ai réécrit à la main ces méthodes d'encodage et de décodage à l'exception de la méthode hexadécimale dans un format modulaire pour la compatibilité multiplateforme / navigateur et également avec une portée privée réelle, et utilise
btoa
etatob
si elles existent en raison de la vitesse plutôt que d'utiliser son propre encodage:https://gist.github.com/Nijikokun/5192472
Usage:
la source
Cette question et ses réponses m'ont indiqué la bonne direction.
Surtout avec unicode atob et btoa ne peuvent pas être utilisés "vanille" et de nos jours TOUT est unicode ..
Directement depuis Mozilla, deux belles fonctions à cet effet (testées avec des balises unicode et html à l'intérieur)
Ces fonctions seront rapides comme l'éclair par rapport au décodage brut en base64 en utilisant une fonction javascript personnalisée car btoa et atob sont exécutés en dehors de l'interpréteur.
Si vous pouvez ignorer les anciens IE et les anciens téléphones portables (comme l'iphone 3?), Cela devrait être une bonne solution.
la source
si vous avez besoin de coder un objet image HTML, vous pouvez écrire une fonction simple comme:
Pour obtenir une base64 d'image par identifiant:
plus ici
la source
Contribuer avec un polyfill minifié pour
window.atob
+window.btoa
que j'utilise actuellement.la source
Je préfère utiliser les méthodes d'encodage / décodage bas64 de CryptoJS , la bibliothèque la plus populaire pour les algorithmes cryptographiques standard et sécurisés implémentés en JavaScript en utilisant les meilleures pratiques et modèles.
la source
Voici une version AngularJS Factory de celle de @ user850789:
la source
J'avais besoin d'encodage d'une chaîne UTF-8 en base64 pour un de mes projets. La plupart des réponses ici ne semblent pas gérer correctement les paires de substitution UTF-16 lors de la conversion en UTF-8, donc, pour terminer, je publierai ma solution:
Notez que le code n'est pas complètement testé. J'ai testé certaines entrées, y compris des choses comme
strToUTF8Base64('衠衢蠩蠨')
et comparées à la sortie d'un outil de codage en ligne ( https://www.base64encode.org/ ).la source
Pour mon projet, j'ai encore besoin de prendre en charge IE7 et de travailler avec une grande entrée pour encoder.
Basé sur le code proposé par Joe Dyndale et comme suggéré dans le commentaire de Marius, il est possible d'améliorer les performances avec IE7 en construisant le résultat avec un tableau au lieu d'une chaîne.
Voici l'exemple d'encodage:
la source
Bien qu'un peu plus de travail, si vous voulez une solution native haute performance, vous pouvez utiliser certaines fonctions HTML5.
Si vous pouvez obtenir vos données dans un
Blob
, vous pouvez utiliser la fonction FileReader.readAsDataURL () pour obtenir unedata://
URL et la couper en avant pour obtenir les données base64.Cependant, vous devrez peut-être effectuer un traitement supplémentaire pour décoder les données, car je ne sais pas si les
+
caractères sont échappés ou non pour l'data://
URL, mais cela devrait être assez trivial.la source
Eh bien, si vous utilisez dojo, cela nous donne un moyen direct d'encoder ou de décoder en base64.
Essaye ça:-
Pour coder un tableau d'octets à l'aide de dojox.encoding.base64:
Pour décoder une chaîne codée en base64:
la source
Vous pouvez utiliser
window.btoa
etwindow.atob
...Utiliser probablement la façon dont MDN est peut faire votre meilleur travail ... Accepter également unicode ... en utilisant ces deux fonctions simples:
la source
Voici une démo en direct de JS
atob()
et desbtoa()
fonctions intégrées:la source
Utilisez la bibliothèque js-base64 comme
la source