Encoding Clojure base64编码
我想要像“string”->base64这样简单的东西。使用较旧的base64.encode-str很容易(听起来“更像clojure”),但较新的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
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)))))