2013-05-13 9 views
10

GitHub(https://github.com/henrikengstrom/roygbiv)からマルチモジュールScalaプロジェクトをダウンロードし、そのうちの1つがPlay 2.0モジュールです。だから私はSBTのrunコマンドを使って、すべてのアプリケーションをすべてのモジュールで実行することができ、すべて正常に動作します。しかし、私は、ブラウザで2.0テンプレート(index.scala.html)英語以外の文字を押してF5を再生するために追加したときに、私はコンパイルエラーを取得:Scala Play 2.0。コンパイルエラー:デコード中のIOエラー

IO error while decoding C:\Users...\web\target\scala-2.9.1\src_managed\main\views\html\index.template.scala with UTF-8 Please try specifying another one using the -encoding option

は私もPlayコンソールを使用していない、SBTのrunコマンドを使用して実行2.0モジュールを再生します。

ソースファイルのエンコードを確認しました。これはUTF-8です。また、BOMなしでUTF-8を試しました。

どこに問題がありますか?

+0

開かれた第2の賞金、今300. – MyTitle

答えて

4

をあなたの問題は、このように思わ:中間のスカラファイルが正しくエンコードされていません。ここで

はプロセスです:

プレイは、あなたのテンプレートファイル(foo.scala.html)を取り、スカラ座にこれを翻訳:target/scala-2.10/src_managed/main/views/html/foo.template.scala。これは、sbtによって.classファイルにコンパイルされ、再生によって実行されます。

これらの中間ファイルは、sbtによって作成されますが、デフォルトのエンコーディングで作成されます(Windowsマシンの場合、BOMのないUTF-8のため、マシンが異なる場合があります)。重要なのは、このエンコーディングは、元のテンプレートファイル(foo.scala.htmlからUTF-16へ)のエンコーディングを変更しても、.scalaファイルのエンコーディングは同じです(UTF-8ではBOMなし場合)。しかし、スカラーコンパイラがITF-8を期待しているため、ファイルを読み取ることができないため、ファイルはコンパイルされません。

「正しい」解決策は、常にUTF-8を使用することです。実際には、これは演奏1.xに推奨される解決策でした。Play documentation Internationalizationを参照してください。これはplay 2と同じです。また、通常の国際化メッセージファイルを使用することもできます。

Bjornにより示唆されるようにあなたが

JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF8' sbt 

を指定するのであれば、これは教えてくれる、それが読み込みと書き込みのすべてのファイルをUTF8になることSBT。また、ビルドでスカラーコンパイラのファイルエンコーディングを指定することもできます。Scalaは:

val main = play.Project(appName, appVersion, appDependencies).settings(
    scalacOptions ++= Seq("-encoding", "UTF-8") 
    // Add your own project settings here  
) 

これは、読み込むすべてのファイル(すなわちfoo.template.scala)はUTF-8でエンコードされているScalaのコンパイラーに指示します。これをデフォルトのエンコードに設定すると、これもうまくいく可能性があります。

あなたの最善の策は、上記のように問題のファイルが消えていることを確認し、JAVA_TOOL_OPTIONで再起動することです。しかし、すべてのビルドがこれを考慮に入れるようにする必要があります(ジェンキン、他の開発者など)。

2

以下は私にとってうまくいきます。日食でUTF-8でエンコードされたデフォルト(スカラ-IDE)あなたは、これらのファイルを保存するために使用しているどのようなエディタ

@(message: String) 

@main("Welcome to Play 2.1") { 
    <div>Ελληνικά</div> 
    <div> 
     @message 
    </div> 
    <br /> 
    <ul> 
    @for(p<-message) { 
    <li> 
    @p 
    </li> 
     } 
    </ul> 

} 
2

?文字が二重にエンコードされ、UTF-8として誤って格納される可能性があります。例えば。 iso-8859-1でエンコードされた文字は、UTF-8として再度エンコードされます。

+0

私はIntellij IDEAとNotepad ++ – MyTitle

5

強制的にUTF-8にエンコードしてSBTを起動しようとする可能性があります。私は何人かの人々のために、以下のオプションを使用してSBTを開始するのに役立ったことを、このpostで読む:

JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF8' 

そして、SBTの最初の行のいずれかが表示されるはずです:

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 
+0

を解決しようとしていますすぐにあなたの解決策を試してみましょう – MyTitle

+0

@Mytitleこれはおそらく解決策です –

1

私はこの問題を抱えていましたが、それは私の母国語の一部の文字(コメント)に起因していることが分かりました。私はそれらを削除し、エラーは消えた。

関連する問題