我有一个 clj 文件:
;; stringparity.clj ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(ns stringparity)
(defn get-java-string [input]
(.getBytes input "UTF-8"))
还有一个 cljs 文件:
;;; stringparity.cljs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(ns stringparity
(:import goog.crypt))
(defn get-js-string [input]
(goog.crypt.stringToUtf8ByteArray input))
以下代码不可执行,get-js-string
只适用于javascript,get-java-string
适用于java;我只是假装你可以在同一台机器上运行它们来说明出了什么问题。这两个函数在使用“简单”字符串时都可以正常工作,但在使用“复杂”字符串(如""
. 我希望能够对 clojure 或 clojurescript 上的任何字符串进行哈希处理,并使它们的哈希值相同。为此,我需要能够将 javascript 或 java 字符串转换为其等效的字节数组。看来我在 clojure 和 clojurescript 方面都使用 UTF-8,但它们不会生成相同的字节数组(它们甚至不是相同的长度)。如何为 clojure 和 clojurescript 中的任何两个等效字符串生成完全相同的字节数组。
(= (seq (get-js-string "hello")) [104, 101, 108, 108, 111]
(seq (get-java-string "hello") [104, 101, 108, 108, 111]))
(= (seq (get-js-string ""))
;; when in cljs, get-js-string evaluates to the following
[237 160 180 237 188 134]
(seq (get-java-string ""))
;; when in clj, get-java-string evaluates to the following
[-16 -99 -116 -122])