Clojure相当于python的base64编码和解码

时间:2016-09-22 15:01:07

标签: python clojure

我有这个python代码片段,需要一个等效的clojure帮助。

user_id = row.get('user_id')
if user_id:
    user_id_bytes = base64.urlsafe_b64decode(user_id)
    creation_timestamp = int.from_bytes(user_id_bytes[:4],
                                    byteorder='big')
    dc_id = int.from_bytes(user_id_bytes[4:5], byteorder='big') & 31
    if creation_timestamp > WHEN_WE_SET_UP_DC_IDS:
        row['dc_id'] = dc_id}

2 个答案:

答案 0 :(得分:3)

您可以使用clojure的java兼容性来利用java.util.Base64类。

user> (import java.util.Base64)
java.util.Base64

user> ;; encode a message
     (let [message "Hello World!"
           message-bytes (.getBytes message) 
           encoder (Base64/getUrlEncoder)]
       (.encodeToString encoder message-bytes)) 
"SGVsbG8gV29ybGQh"

user> ;; Decode a message
      (let [encoded-message "SGVsbG8gV29ybGQh"
            decoder (Base64/getUrlDecoder)]
        (String. (.decode decoder encoded-message)))
"Hello World!"

答案 1 :(得分:0)

The Tupelo library包含围绕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文档are here.