UTF-8 字符未在控制台中正确显示
UTF-8 characters not displayed correctly in 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)能够显示这些字符 - 当我将 { :kreuz "♣", :grun "♠", :herz "♥", :schell "♦" }
直接复制粘贴到 REPL 中时,它正确显示了它们。
我错过了什么?
控制台的字符编码设置与 Clojure 认为的不同。
我的解决方案是 运行:
cmd /c chcp 65001
它将控制台中的默认代码页设置为 UTF-8。默认情况下,CMD 使用代码页默认为当前语言和本地化设置,例如437 for United States. Settings it to UTF-8 (65001) 解决了问题。
@Jesper 建议它与控制台编码有关后,我从 this question 的第二个答案中得到了这个想法。
我正在 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)能够显示这些字符 - 当我将 { :kreuz "♣", :grun "♠", :herz "♥", :schell "♦" }
直接复制粘贴到 REPL 中时,它正确显示了它们。
我错过了什么?
控制台的字符编码设置与 Clojure 认为的不同。
我的解决方案是 运行:
cmd /c chcp 65001
它将控制台中的默认代码页设置为 UTF-8。默认情况下,CMD 使用代码页默认为当前语言和本地化设置,例如437 for United States. Settings it to UTF-8 (65001) 解决了问题。
@Jesper 建议它与控制台编码有关后,我从 this question 的第二个答案中得到了这个想法。