请在2024年Clojure状态调查!中分享您的看法。

欢迎!有关如何工作的更多信息,请参阅关于页面。

+1
打印
重新标记

复制很简单,注意Java的println中生对的和Clojure的println中的错误

Clojure 1.10.3
user=> (.println System/out "abc\u2551")
abc║
nil
user=> (println "abc\u2551")
abc?
nil

3个答案

+2

有趣,在我的情况下,我两者都有正确,刚用clj启动的新REPL中。

Clojure 1.10.3
user=> (.println System/out "abc\u2551")
abc║
nil
user=> (println "abc\u2551")
abc║
nil
+2

我怀疑造成差异的根本原因可能与操作系统、JDK版本、是否在IDE(如VSCode的Calva、Emacs的CIDER)内部或终端运行REPL,以及JVM使用的环境变量设置有关,这些变量用于确定字符集,如macOS和Linux上的LC、LANG、TERM等。

至少对于macOS 10.14.6的内置终端、AdoptOpenJDK 15.0.1和在该终端中使用clojure版本1.10.1.763启动的REPL,以及以下环境变量值,我得到了预期的结果

$ env | egrep '(LC|LANG|TERM)' TERM_PROGRAM=Apple_Terminal TERM=xterm-256color TERM_PROGRAM_VERSION=421.2 TERM_SESSION_ID=51C20403-498A-4E4E-ABFE-B59367276B5D LANG=en_US.UTF-8

0

编辑了

很有趣 :-),以下是我系统的更多信息
操作系统: Windows 10, version 21H1
Java:
java 版本 "1.8.0_311" Java(SE) 运行环境 (build 1.8.0_311-b11) Java(HotSpot) 客户端 VM (build 25.311-b11, 混合模式)
终端
我尝试了4个不同的终端:cmd、PowerShell、VS Code内置终端和ConEmu。所有的结果都一样。
我还尝试了PowerShell中的cljlein trampoline run以及直接调用java -jar uberjar,但Clojure的println从不正常工作,而Java总是正常。

我在Windows 10 21H1、JDK 16、clj 1.10.3上有相同的问题...
...