2012-10-03 45 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(未經我測試)。