2016-09-22 30 views
0

我有這個python代碼片段,需要與clojure等效的幫助。Clojure相當於python的base64編碼和解碼

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} 

回答

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.

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!"