Question Encodage Clojure base64


Je veux quelque chose d'aussi simple que "string" -> base64. Avec l’ancien base64.encode-str, c’était facile (et semblait plus "clojure", mais le plus récent clojure.data.codec.base64 nécessite des flux d'entrée et de sortie et semble être un wrapper laid autour de la façon de faire de Java.

Alors, comment avoir une chaîne pour obtenir un tableau encodé en base64? Merci


12
2017-08-06 09:16


origine


Réponses:


Vous pouvez utiliser encoder fonction et passe tableau d'octets:

(encode (.getBytes "Hello world!"))

10
2017-08-06 09:19



Quatre ans plus tard, mais je pense que cela mérite d'être mentionné si vous êtes à JDK 1.8 ou plus grand. Il utilise juste java.util.Base64

Pour encoder une chaîne -> Base64:

(:import java.util.Base64)

(defn encode [to-encode]
  (.encode (Base64/getEncoder) (.getBytes to-encode)))

Pour coder une chaîne -> Base64 (chaîne):

(:import java.util.Base64)

(defn encode [to-encode]
  (.encodeToString (Base64/getEncoder) (.getBytes to-encode)))

Pour décoder Base64 (byte [] ou String) -> String:

(:import java.util.Base64)

(defn decode [to-decode]
  (String. (.decode (Base64/getDecoder) to-decode)))

18
2017-08-28 07:09



Il y a encore une étape nécessaire pour l'autre réponse: convertir le résultat du tableau d'octets de encode dans une chaîne. Voici ce que je fais:

(:require [clojure.data.codec.base64 :as b64])

(defn string-to-base64-string [original]
  (String. (b64/encode (.getBytes original)) "UTF-8"))

17
2018-05-27 22:35



ztellman / byte-transforms supporte également l'encodage / décodage en base64.

(encode "hello" :base64 {:url-safe? true})

2
2018-01-31 07:50



Duplicata possible de Clojure équivalent à l'encodage et au décodage de base64 de python

La bibliothèque Tupelo contient des encapsuleurs Clojure autour des fonctionnalités de base Java Base64 et Base64Url. Un regard sur les tests unitaires montre le code en action:

(ns tst.tupelo.base64
  (:require [tupelo.base64 :as b64] ))

code-str    (b64/encode-str  orig)
result      (b64/decode-str  code-str) ]
(is (= orig result))

où les valeurs d'entrée et de sortie sont des chaînes simples (il existe également une variante pour les tableaux d'octets).

Les documents API sont ici.


1
2017-09-22 16:11



Pour ceux qui essayent (comme moi) de transformer des images en URI de données (pour incorporer des images en HTML):

(defn data-uri
  [imagepath]
  (str
   "data:image/"
   (second
    (re-find #"\.(.*$)" imagepath))
   ";base64,"
   (.encodeToString
    (java.util.Base64/getEncoder)
    (org.apache.commons.io.FileUtils/readFileToByteArray
     (clojure.java.io/file filepath)))))

0
2018-03-20 13:25