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版本、是否在类似VSCode的Calva IDE或Emacs的CIDER IDE内运行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

编辑

有趣的是,以下是我系统的更多信息
OS: 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的则总是可以。

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