Подтвердить что ты не робот

Clojure кодировка base64

Мне нужно что-то простое, как "string" → base64. С более старым base64.encode-str это было просто (и звучало "больше clojure", но новый clojure.data.codec.base64 требует потоков ввода и вывода и кажется уродливой оболочкой вокруг Java-способа делать что-то.

Итак, каков способ, имеющий строку, получить массив с кодировкой base64? Спасибо

4b9b3361

Ответ 1

Вы можете использовать encode и передать массив байтов:

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

Ответ 2

Для другого ответа требуется еще один шаг: преобразование результата байтового массива encode в строку. Вот что я делаю:

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

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

Ответ 3

Четыре года спустя, но я думаю, это стоит упомянуть, если вы в JDK 1.8 или выше. Он просто использует java.util.Base64

Кодировать строку → Base64:

(:import java.util.Base64)

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

Кодировать строку → Base64 (String):

(:import java.util.Base64)

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

Чтобы декодировать Base64 (byte [] или String) → String:

(:import java.util.Base64)

(defn decode [to-decode]
  (String. (.decode (Base64/getDecoder) to-decode)))

Ответ 4

ztellman/byte-transforms также поддерживают кодировку/декодирование base64.

(encode "hello" :base64 {:url-safe? true})

Ответ 5

Возможный дубликат 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 .