【问题标题】:Scala vs. Groovy behavior when printing UTF-8 char in Windows terminal在 Windows 终端中打印 UTF-8 字符时的 Scala 与 Groovy 行为
【发布时间】:2017-06-09 20:47:20
【问题描述】:

我的问题类似于Printing Unicode from Scala interpreterscala default encoding in windows shell,但更详细地介绍了 Scala(2.12.2 版)与 Groovy(2.4.7 版)的 WRT 不同行为。

我有以下代码 sn-p(恰好是有效的 Scala 和 Groovy 代码):

println("└─ ");
println("├─ ");
println(System.getProperty("file.encoding"));

在其上运行 scala 解释器时,它会显示 Windows 终端(所有 cmd、PowerShell、Git Bash / mintty)

$ scala a.scala
??
??
Cp1252

但是,通过它显示的 groovy 解释器运行完全相同的代码:

$ groovy a.scala
└─
├─
Cp1252

通过阅读链接问题的答案,我的理解是输出(完全)取决于 file.encoding 系统属性的值。如果是这样,那么如果使用的 file.encoding 相同,那么 Scala 和 Groovy 之间的输出有何不同?

编辑: This answer 似乎确认这是 Scala 编译器用于读取源代码文件的编码问题,这似乎默认为 file.encoding 设置的任何值,甚至如果文件显然是 UTF-8 编码的。我仍然想知道为什么 Scala 在这里不如 Groovy 聪明...

编辑 2:我可以通过运行解决此问题

$ scala -Dfile.encoding=UTF8 a.scala
└─
├─
UTF8

但这仍然不能回答为什么尽管将file.encoding 设置为Cp1252,Groovy 还是能做到这一点。

【问题讨论】:

    标签: windows scala groovy encoding utf-8


    【解决方案1】:

    我认为它在编译步骤中与不同的源编码有关

    试试这个而不是println("├─ ");

    println("\u251C\u2500");
    

    或者groovy有一个参数--encoding来指定源文件的编码。

    相当肯定scala应该是同一个参数

    最后最好不要在源代码中使用非 ASCII 字符。

    我使用this service 转换字符(但任何 ide 都可以为您完成)

    【讨论】:

    • 好主意,它与编译器用于读取文件的编码有关。但是,您的代码仍然为我提供了 Scala 的 ??,现在也为 Groovy 提供了。
    • 在阅读this answer 时,您似乎是对的,但即使文件显然是UTF-8 编码,Scala 仍会使用file.encoding 仍然很尴尬。
    • 好的,另一点可能是console encoding。对我来说(在windows 上)如果我使用命令chcp 1252 将控制台编码设置为1252,那么我将在输出中看到??。如果我选择chcp 437,那么我会看到├─
    • 是的,我读过那个(或类似的)答案,但这些是指一般的控制台字体,如果它与 Groovy 一起使用,这不是原因,但不能与 Scala 一起使用控制台窗口。
    猜你喜欢
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 2016-12-03
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    相关资源
    最近更新 更多