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

标签 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 \ΓÖª}

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

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

project.clj 文件,但它没有帮助。我知道控制台(Cygwin 的 Bash)能够显示这些字符 - 当我复制粘贴时code> 直接进入 REPL 它正确地显示了它们。

我错过了什么?

最佳答案

我的解决方案是运行:

cmd /c chcp 65001

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

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

关于UTF-8 字符未在控制台中正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29493513/

相关文章:

php - 将 UTF-8 字符作为 Ascii 写入文件

delphi - 如何在 TMenuOption 中显示希腊符号

variables - 在 clojure 中定义多个常量变量

clojure - 接下来,在 Clojure 中休息

javascript - 如何为 JavaScript 运行 Windows 控制台

c# - 如何自动关闭控制台应用程序窗口

python - 是否可以通过 url 传递非 ASCII 值?或者这里还有其他我没有看到的错误?

c++ - QFileInfo 和 UTF-8

clojure - 带关键字参数的可变参数函数

grails - 服务器和应用程序的消息在 Intellij 2016 中显示在哪里?