UTF-8字符在控制台中无法正确显示

时间:2015-04-07 14:04:07

标签: utf-8 clojure console

我在Clojure中实现了一个纸牌游戏,我想用unicode字符代表套装:

(def color-str "Maps card colors to strings"
  { :kreuz "♣", :grun "♠", :herz   "♥", :schell "♦" })

然而,我得到了这个结果而不是所需的字符:

{:grun "ΓÖá", :herz "ΓÖÑ", :kreuz "ΓÖú", :schell "ΓÖª"}

同样,当我将color-str重新定义为:

(def color-str "Maps card colors to strings"
  { :kreuz \u2663, :grun \u2660, :herz \u2665, :schell \u2666 })

我明白了:

{:grun \ΓÖá, :herz \ΓÖÑ, :kreuz \ΓÖú, :schell \ΓÖª}

文件保存为UTF-8,无BOM。我已经尝试添加:

:javac-options ["-encoding utf8"]
:jvm-opts ["-Dfile.encoding=UTF-8"]

project.clj文件,但它没有帮助。我知道控制台(Cygwin的Bash)能够显示这些字符 - 当我将{ :kreuz "♣", :grun "♠", :herz "♥", :schell "♦" }直接复制粘贴到REPL中时,它会正确显示它们。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

我的解决方案是:

cmd /c chcp 65001

它将控制台中的默认代码页设置为UTF-8。默认情况下,CMD使用代码页默认为当前语言和本地化设置,例如437 for United States。将其设置为UTF-8(65001)可以解决问题。

@Jesper建议它与控制台编码有关后,我在this question的第2个回答中得到了这个想法。

答案 1 :(得分:1)

控制台的字符编码设置为与Clojure认为设置的不同。