我有一个与sbt test encoding hickup非常相似的问题,但由于答案不适用,我的案例是Scala代码,我在这里问。
我在单元测试中有一个包含非ASCII字符的字符串。这个测试在Linux上工作正常,在从IntelliJ运行时在Windows上运行良好。但是,当从带有sbt test
的Windows shell运行时,它们会失败。如果我打印字符串humanité
,它会在失败的情况下显示为humanitΘ
。文件编码为UTF-8。
println(new java.io.InputStreamReader(System.in).getEncoding)
从IntelliJ运行时返回UTF8
,从shell运行Cp1252
。我尝试了各种改变编码的方法:
sbt "-Dfile.encoding=UTF-8" test
但默认编码总是Cp1252
(也许这是正常的?)并且测试仍然失败。
失败的代码如下:
val stringToEncrypt = "l'humanité"
println(test)
从IntelliJ我得到:
l'humanité
从运行sbt的windows shell:
l'humanitΘ
为了避免OS的默认字符集问题,您可以在创建InputStream
时明确传递所需的字符集:
new java.io.InputStreamReader(System.in,"UTF-8")