2012-10-03 46 views
3

我正在为使用地理坐标的工作编写Java库,并且使用Scala中的specs2来实现测试。我有很多测试对字符串进行比较,字符串包括学位符号°(这是一个非ASCII字符)。sbt测试编码hickup

如果我从IntelliJ内部运行这些测试,它们都会通过。他们也传递了特拉维斯CI。但是,如果我从我的电源外壳(视窗64)运行sbt test(SBT 11.3),所有这些测试失败,控制台显示的屏幕截图所示畸形字符串,如:

encoding problems

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

+0

你看到的S33让我想到了ASCII编码的颜色。如果使用'nocolor'运行会发生什么情况:“sbt test-only - nocolor”? – Eric

+0

'nocolor'不会改变这种行为。但它变得更加奇怪:如果我运行'sbt test'(失败),然后在IntelliJ中运行测试,那么测试也会失败。 'sbt clean' - > IntelliJ,一切都很好。所以这似乎是一种编译相关?! – Leo

+0

您的学位符号是否直接在源文件中编码?如果是这样,我怀疑你可能有一些编码问题(可能源文件在被SBT编译时被解释为IntelliJ和CP1252中的UTF-8)。尝试将度数符号更改为'\ u00B0'并重新编译。或者,您可以尝试使用'javacOptions ++ = Seq(“ - encoding”,“UTF-8”)在SBT中设置源文件编码。 – msandiford

回答

6

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

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

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

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

您可以告知javac编译器使用-encoding UTF-8选项的替代编码以及使用-Dfile.encoding=UTF-8的运行时。

通过Google,我还发现了一些关于如何在系统范围内执行此操作的信息here(未经我测试)。