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版本、REPL是否在VSCode with Calva、Emacs with CIDER等IDE内部运行,或者是在终端中运行,甚至可能是用于确定字符集的用于JVM的环境变量设置,如macOS和Linux上的LC、LANG、TERM等。

至少对于macOS 10.14.6内置的Terminal、AdoptOpenJDK 15.0.1和一个在该Terminal中使用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
by
编辑 by

有趣:-),以下是我系统的一些更多信息
OS: Windows 10, version 21H1
Java:
java版本 "1.8.0_311" Java(TM) SE运行时环境 (编译 1.8.0_311-b11) Java HotSpot(TM) 客户端虚拟机 (编译 25.311-b11, 混合模式)
终端
我尝试了4个不同的终端:cmd、PowerShell、VS Code的内置term和ConEmu。四个都得到了相同的结果。
我还尝试了从PowerShell中运行cljlein trampoline run以及直接调用java -jar uberjar,Clojure的println永远不正常工作,而Java的总是正常。

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