Clojure base64编码

pis*_*hio 14 encoding clojure

我想要一些像"string" - > base64这样简单的东西.使用较旧的base64.encode-str它很容易(并且听起来更"讨厌",但是较新的clojure.data.codec.base64需要输入和输出流,并且似乎是围绕Java做事方式的丑陋包装.

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

nll*_*oyd 27

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

要编码字符串 - > Base64:

(:import java.util.Base64)

(defn encode [to-encode]
  (.encode (Base64/getEncoder) (.getBytes to-encode)))
Run Code Online (Sandbox Code Playgroud)

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

(:import java.util.Base64)

(defn encode [to-encode]
  (.encodeToString (Base64/getEncoder) (.getBytes to-encode)))
Run Code Online (Sandbox Code Playgroud)

解码Base64(byte []或String) - > String:

(:import java.util.Base64)

(defn decode [to-decode]
  (String. (.decode (Base64/getDecoder) to-decode)))
Run Code Online (Sandbox Code Playgroud)


Bri*_*ick 17

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

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

(defn string-to-base64-string [original]
  (String. (b64/encode (.getBytes original)) "UTF-8"))
Run Code Online (Sandbox Code Playgroud)

  • 我认为字符串到字符串函数对clojure.data是一个有用的补充. (6认同)

Nik*_*zov 11

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

(encode (.getBytes "Hello world!"))
Run Code Online (Sandbox Code Playgroud)

  • 是的,虽然字符集可以搞砸了,这是我省略字符串相关函数的一个原因. (3认同)
  • 我现在应该使用什么(2014年5月)?因为这个data.codec最后一次提交3年前. (2认同)
  • @invis我会使用data.codec来完成这项工作. (2认同)