Enum Normalizer.Form 的 Clojure Java 互操作

fil*_*e13 3 java unicode enums interop clojure

我花了很长时间试图弄清楚如何在 Clojure 中使用 Java 互操作来规范化 Unicode。我一直在尝试使用java.text.Normalizer,但是ClassNotFoundException在尝试调用枚举Normalizer.Form.NFD时我一直在尝试。本质上,我只是想在 Java 中做这样的事情:

java.text.Normalizer.normalize("?????", java.text.Normalizer.Form.NFD);
Run Code Online (Sandbox Code Playgroud)

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

(import java.text.Normalizer)
(java.text.Normalizer/normalize "?????" java.text.Normalizer.Form/NFD)
Run Code Online (Sandbox Code Playgroud)

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 对其进行了测试,并且运行良好。所以这个类安装在系统上。谁能告诉我我在这里做错了什么?我叫错了吗?也许我还需要导入其他东西?任何意见是极大的赞赏。

Shl*_*omi 5

这会给您带来麻烦,因为Forminner class. 在字节码中,一个类outer.inner实际上表示为outer$inner. 在这个 SO question这个 google group post 中查看更多信息

(import java.text.Normalizer
        java.text.Normalizer$Form)
(java.text.Normalizer/normalize "?????" java.text.Normalizer$Form/NFD) ;; "???????"
Run Code Online (Sandbox Code Playgroud)