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

有趣,在我case中两个都正确,只是在用 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
by
编辑 by

有趣 :-),这里有更多关于我的系统的信息
OS: Windows 10, version 21H1
Java:
java版本 "1.8.0_311" Java(TM) SE 运行环境 (构建 1.8.0_311-b11) Java HotSpot(TM) 客户端 VM (构建 25.311-b11, 混合模式)
终端
我已经尝试了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上遇到相同的问题...
...