3

我正在为地理坐标工作编写一个 Java 库,并且测试是用 Scala 中的 specs2 实现的。我有许多测试对包含度数符号°(非 ASCII 字符)的字符串进行字符串比较。

如果我在 IntelliJ 中运行这些测试,它们都会通过。他们还传递了 Travis CI。但是,如果我sbt test从我的 Power Shell (Windows x64) 运行 (sbt 11.3),所有这些测试都会失败,并且控制台会显示格式错误的字符串,如屏幕截图所示:

编码问题

可能是什么问题,我该如何解决?我检查了这些文件是 UTF8 编码的。另请注意,更改我的 Java 配置不会有太大帮助,因为如果其他人克隆存储库,则只需运行测试(因此任何仅在我的系统上解决问题的解决方案都无济于事)。但我完全不知道这里出了什么问题......

4

1 回答 1

6

您的学位符号是否直接编码在源文件中?

如果是这样,我怀疑您可能有一些编码问题(在 SBT 编译时,源文件可能在 IntelliJ 和 CP1252 中被解释为 UTF-8)。

您可以尝试将度数符号更改为'\u00B0'并重新编译,或者您可以尝试将 SBT 中的源文件编码设置为javacOptions ++= Seq("-encoding", "UTF-8").

FWIW,除非另有说明,否则编译器(和运行时)对源(和其他)文件 I/O 使用默认编码。Windows 的默认编码是 CP1252。

您可以告诉javac编译器使用带有-encoding UTF-8选项的替代编码,并使用-Dfile.encoding=UTF-8.

通过谷歌,我还在这里找到了一些关于如何在系统范围内执行此操作的信息未经我测试)。

于 2012-10-08T20:46:52.640 回答