我试图在clojure中打印一个中文字符串“哈哈”。运行时环境是Windows 7,cmd.exe
。默认代码页为CP936(GBK)。我可以在cmd.exe
下查看GBK编码的源文件,并正确显示“哈哈”,只需运行type core.clj
。
我知道我可以将cmd.exe
的代码页更改为65001以启用UTF-8,但我确实想知道:
cmd.exe
下打印GBK字符吗?我使用leiningen来设置项目,这里是project.clj
文件:
(defproject fibo "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.5.1"]]
:jvm-opts ["-Dfile.encoding=utf-8"]
:main fibo.core)
源代码很简单:
(ns fibo.core
(:gen-class))
(defn -main
[& args]
;; work around dangerous default behaviour in Clojure
(alter-var-root #'*read-eval* (constantly false))
(println "哈哈"))
输出如下:
D:...\_dev\fibo> lein run
????
我还尝试在设置JAVA_OPTION -Dfile.encoding = xxx 后调用lein run
。不幸的是, UTF-8 / GBK / GB18030 / ANSI / CP936 都没有帮助,我总是????
。
澄清一件事:当我尝试使用_JAVA_OPTION来更改file.encoding时,我没有同时使用:jvm-opts ["-Dfile.encoding=utf-8"]
。在我没有运气的情况下尝试了上述所有编码之后,我在project.clj中添加了:jvm-opts
,并将UTF-8作为默认编码。
答案 0 :(得分:1)
这取决于你认为的源文件编码。 是的,我认为使用GBK for Java是某种方式......愚蠢。 我的文件是UTF-8编码的,我在win7下测试它们,Ubuntu都显示正常。因为clojure基于Java,并且java总是很难对待GBK,我建议你总是使用UTF-8。如果必须使用GBK,则某些java函数可以在GBK和UTF-8之间进行转换。