21

我想要像“字符串”-> base64 这样简单的东西。使用较旧的 base64.encode-str 很容易(听起来“更 clojure”,但较新的clojure.data.codec.base64需要输入和输出流,并且似乎是 Java 做事方式的丑陋包装。

那么,有一个字符串,得到一个 base64 编码的数组的方法是什么?谢谢

4

6 回答 6

42

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

编码字符串-> Base64:

(:import java.util.Base64)

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

编码字符串 - > Base64(字符串):

(:import java.util.Base64)

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

解码 Base64(字节 [] 或字符串)-> 字符串:

(:import java.util.Base64)

(defn decode [to-decode]
  (String. (.decode (Base64/getDecoder) to-decode)))
于 2016-08-28T07:09:27.447 回答
20

另一个答案还需要一个步骤:将字节数组结果encode转换为字符串。这就是我所做的:

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

(defn string-to-base64-string [original]
  (String. (b64/encode (.getBytes original)) "UTF-8"))
于 2013-05-27T22:35:52.057 回答
12

您可以使用编码函数并传递字节数组:

(encode (.getBytes "Hello world!"))
于 2012-08-06T09:19:56.680 回答
3

ztellman/byte-transforms也支持 base64 编码/解码。

(encode "hello" :base64 {:url-safe? true})
于 2017-01-31T07:50:07.753 回答
3

对于那些尝试(就像我一样)将图像转换为数据 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)))))
于 2018-03-20T13:25:37.750 回答
1

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 文档在这里。

于 2016-09-22T16:11:45.563 回答