3

私は地理座標を使用する作業用のJavaライブラリを作成しており、テストはScalaのspecs2で実装されています。度記号°(非ASCII文字)を含む文字列に対して文字列比較を行う多くのテストがあります。

IntelliJ内からこれらのテストを実行すると、すべて合格です。また、TravisCIを渡します。しかし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 に答える