Clojure Java 枚举的互操作 Normalizer.Form

Clojure Java Interop of Enum Normalizer.Form

我花了很多时间试图找出如何使用 Clojure 中的 Java 互操作来规范化 Unicode。我一直在尝试使用 java.text.Normalizer, but I keep getting ClassNotFoundException when trying to call the enum Normalizer.Form.NFD。本质上,我只是想在 Java:

中做这样的事情
java.text.Normalizer.normalize("Ἑλλάς", java.text.Normalizer.Form.NFD);

我一直在尝试在 Clojure 中做这样的事情,但无济于事:

(import java.text.Normalizer)
(java.text.Normalizer/normalize "Ἑλλάς" java.text.Normalizer.Form/NFD)

Normalizer/normalize 似乎没问题,但到达 Normalizer.Form.NFD 似乎是问题所在,因为我不断收到错误:

Caused by java.lang.ClassNotFoundException java.text.Normalizer.Form

我正在 Windows 使用:Clojure 1.8.0Java HotSpot(TM) 64-Bit Server VM 1.8.0_112-b15

我继续在常规 Java 中测试它,它工作正常。所以系统上安装了 class。谁能告诉我我在这里做错了什么?我叫错了吗?也许我还需要导入其他东西吗?非常感谢任何建议。

这会给您带来麻烦,因为 Form 是一个 inner class。在字节码中,一个classouter.inner实际上表示为outer$inner。查看更多 in this SO question, and this google group post.

(import java.text.Normalizer
        java.text.Normalizer$Form)
(java.text.Normalizer/normalize "Ἑλλάς" java.text.Normalizer$Form/NFD) ;; "Ἑλλάς"