Ответ 1
Вы можете использовать encode и передать массив байтов:
(encode (.getBytes "Hello world!"))
Мне нужно что-то простое, как "string" → base64. С более старым base64.encode-str это было просто (и звучало "больше clojure", но новый clojure.data.codec.base64
требует потоков ввода и вывода и кажется уродливой оболочкой вокруг Java-способа делать что-то.
Итак, каков способ, имеющий строку, получить массив с кодировкой base64? Спасибо
Вы можете использовать encode и передать массив байтов:
(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"))
Четыре года спустя, но я думаю, это стоит упомянуть, если вы в 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)))
ztellman/byte-transforms также поддерживают кодировку/декодирование base64.
(encode "hello" :base64 {:url-safe? true})
Возможный дубликат Clojure эквивалент кодирования и декодирования python base64
В библиотеке Tupelo есть Clojure обертки вокруг базовых функций Java Base64 и Base64Url. Взгляд на модульные тесты показывает код в действии:
(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 docs .