我想要像“字符串”-> base64 这样简单的东西。使用较旧的 base64.encode-str 很容易(听起来“更 clojure”,但较新的clojure.data.codec.base64
需要输入和输出流,并且似乎是 Java 做事方式的丑陋包装。
那么,有一个字符串,得到一个 base64 编码的数组的方法是什么?谢谢
四年后,但如果您使用的是JDK 1.8或更高版本,我认为这值得一提。它只是使用java.util.Base64
(:import java.util.Base64)
(defn encode [to-encode]
(.encode (Base64/getEncoder) (.getBytes to-encode)))
(:import java.util.Base64)
(defn encode [to-encode]
(.encodeToString (Base64/getEncoder) (.getBytes to-encode)))
(:import java.util.Base64)
(defn decode [to-decode]
(String. (.decode (Base64/getDecoder) to-decode)))
另一个答案还需要一个步骤:将字节数组结果encode
转换为字符串。这就是我所做的:
(:require [clojure.data.codec.base64 :as b64])
(defn string-to-base64-string [original]
(String. (b64/encode (.getBytes original)) "UTF-8"))
您可以使用编码函数并传递字节数组:
(encode (.getBytes "Hello world!"))
ztellman/byte-transforms也支持 base64 编码/解码。
(encode "hello" :base64 {:url-safe? true})
对于那些尝试(就像我一样)将图像转换为数据 URI(用于在 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)))))
Clojure 的可能副本,相当于 python 的 base64 编码和解码
Tupelo 库具有围绕基本 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 文档在这里。