1

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

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

  1. cmd.exeWin7下用Java程序打印GBK字符是不是很傻?
  2. 我可以在 Clojure 中“生成”一个带有 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
????

而且我还尝试lein run在设置 JAVA_OPTION -Dfile.encoding=xxx后调用。不幸的是,UTF-8 / GBK / GB18030 / ANSI / CP936都没有帮助,我总是得到????.

需要澄清的一件事:当我尝试使用 _JAVA_OPTION 更改 file.encoding 时,我没有同时使用:jvm-opts ["-Dfile.encoding=utf-8"]。在我尝试了上述所有编码但没有运气后,我:jvm-opts在 project.clj 中添加了 UTF-8 作为默认编码。

4

1 回答 1

1

这取决于我认为的源文件编码。是的,我认为将 GBK 用于 Java 有点……愚蠢。我的文件是 UTF-8 编码的,我在 win7 和 Ubuntu 下测试它们都显示正常。由于 clojure 是基于 Java 的,而 java 总是对 GBK 很差,我建议你总是使用 UTF-8。如果必须使用 GBK,一些 java 函数可以在 GBK 和 UTF-8 之间进行转换。

于 2013-08-13T09:39:00.927 回答