2024 State of 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

有趣的是,在我的情况下,无论在重新启动的 REPL 中使用 clj

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

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

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

$ env | egrep '(LC|LANG|TERM)'

0 投票

编辑

很有趣 :-), 这里是我的系统更多信息
操作系统: Windows 10, version 21H1
Java:
java version "1.8.0_311" Java(TM) SE Runtime Environment (build 1.8.0_311-b11) Java HotSpot(TM) Client VM (build 25.311-b11, mixed mode)
终端
我曾尝试了4个不同的终端:cmd、PowerShell、VS Code内置终端和ConEmu。这4个终端上结果相同。
我还尝试过从PowerShell中运行clj、使用lein trampoline run以及直接调用java -jar uberjar,但 Clojure的println始终不能正确工作,而Java的则可以。

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