sbt测试编码问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sbt测试编码问题相关的知识,希望对你有一定的参考价值。

我有一个与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
  • 检查我的build.sbt中定义的scalacOptions是否包含“-encoding”,“UTF8”

但默认编码总是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")

以上是关于sbt测试编码问题的主要内容,如果未能解决你的问题,请参考以下文章

玩 2.3.8 sbt 不包括 logback

如何设置 SBT 构建以在 Jenkins 测试失败时返回零退出代码?

动态创建测试 sbt

多项目中的SBT测试依赖性:使测试代码可用于相关项目

为啥 sbt-native-packager 在分发包中生成硬编码的***父目录?

SBT 内存不足