在Windows 7(cmd.exe)下,是否可以在Clojure中使用GBK编码(打印字符串)?

时间:2013-07-04 19:13:54

标签: encoding clojure cmd cjk

我试图在clojure中打印一个中文字符串“哈哈”。运行时环境是Windows 7,cmd.exe。默认代码页为CP936(GBK)。我可以在cmd.exe下查看GBK编码的源文件,并正确显示“哈哈”,只需运行type core.clj

我知道我可以将cmd.exe的代码页更改为65001以启用UTF-8,但我确实想知道:

  1. 傻瓜尝试使用Java程序在Win7 cmd.exe下打印GBK字符吗?
  2. 我可以在Clojure中“生成”带有GBK编码的字符串吗?
  3. 我使用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作为默认编码。

1 个答案:

答案 0 :(得分:1)

这取决于你认为的源文件编码。 是的,我认为使用GBK for Java是某种方式......愚蠢。 我的文件是UTF-8编码的,我在win7下测试它们,Ubuntu都显示正常。因为clojure基于Java,并且java总是很难对待GBK,我建议你总是使用UTF-8。如果必须使用GBK,则某些java函数可以在GBK和UTF-8之间进行转换。