1

clj ファイルが 1 つあります。

;; stringparity.clj ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(ns stringparity)

    (defn get-java-string [input]
      (.getBytes input "UTF-8"))

そして 1 つの 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 の両方で、2 つの同等の文字列に対してまったく同じバイト配列を生成するにはどうすればよいですか。

(= (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])
4

2 に答える 2

4

The javascript implementation doesn't properly handle characters with codepoints above 65535.

于 2013-10-14T19:43:50.000 に答える