控制台中未正确显示UTF-8字符



我正在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中时,它会正确地显示它们。

我错过了什么?

我的解决方案是运行:

cmd /c chcp 65001

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

在@Jesper提出这与控制台编码有关后,我从这个问题的第二个答案中得到了这个想法。

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

最新更新