Encoding Clojure base64编码

Encoding Clojure base64编码,encoding,clojure,Encoding,Clojure,我想要像“string”->base64这样简单的东西。使用较旧的base64.encode-str很容易(听起来“更像clojure”),但较新的clojure.data.codec.base64需要输入和输出流,而且似乎是一个难看的Java操作方式包装器 那么,使用字符串获得base64编码数组的方法是什么呢?谢谢您可以使用函数并传递字节数组: (encode (.getBytes "Hello world!")) 另一个答案还需要一个步骤:将encode的字节数组结果转换为字符串 (:r

我想要像“string”->base64这样简单的东西。使用较旧的base64.encode-str很容易(听起来“更像clojure”),但较新的
clojure.data.codec.base64需要输入和输出流,而且似乎是一个难看的Java操作方式包装器

那么,使用字符串获得base64编码数组的方法是什么呢?谢谢您可以使用函数并传递字节数组:

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

另一个答案还需要一个步骤:将
encode
的字节数组结果转换为字符串

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

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

四年后,但我认为如果您使用的是JDK1.8或更高版本,这一点值得一提。它只使用
java.util.Base64

要对字符串->Base64进行编码: 要编码字符串->Base64(字符串): 要解码Base64(字节[]或字符串)->字符串: 可能重复的

在基本Java Base64和Base64Url功能周围有Clojure包装器。查看单元测试,可以看到正在运行的代码:

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

code-str    (b64/encode-str  orig)
result      (b64/decode-str  code-str) ]
(is (= orig result))
其中输入和输出值是纯字符串(字节数组也有一个变体)

API文档也支持base64编码/解码

(encode "hello" :base64 {:url-safe? true})
对于那些试图(像我一样)将图像转换为数据URI(用于在HTML中嵌入图像)的人:


是的,虽然字符集可能会搞糟这一点,这也是我忽略与字符串相关的函数的原因之一。我现在应该使用什么(2014年5月)?因为这个data.codec上次提交是在3年前。我确实认为字符串到字符串的函数将是clojure.data的一个有用的补充。对我来说,为getBytes调用包含编码似乎更安全:(.getBytes原始“UTF-8”)
(:import java.util.Base64)

(defn decode [to-decode]
  (String. (.decode (Base64/getDecoder) to-decode)))
(ns tst.tupelo.base64
  (:require [tupelo.base64 :as b64] ))

code-str    (b64/encode-str  orig)
result      (b64/decode-str  code-str) ]
(is (= orig result))
(encode "hello" :base64 {:url-safe? true})
(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)))))