2013-05-13 7 views
10

Ich habe Multi-Modul-Scala-Projekt von GitHub (https://github.com/henrikengstrom/roygbiv) heruntergeladen, und eines der Module ist Play 2.0-Modul. So kann ich ganze Anwendung mit SBT run Befehl auf jedem Modul ausführen, und alles funktioniert gut. Aber wenn ich hinzufügen 2.0 Vorlage Play (index.scala.html) nicht-englische Zeichen und drücken Sie F5 in Browser erhalte ich Kompilierungsfehler:Scala spielen 2.0. Kompilierungsfehler: IO-Fehler beim Decodieren

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

2,0 Modul Spielen I laufen auch mit run Befehl des SBT, nicht Play Konsole.

Ich überprüft Quellcodierung - es ist UTF-8. UTF-8 auch ohne BOM ausprobiert.

Wo kann ein Problem auftreten?

+0

geöffnet zweiten Kopfgeld, jetzt 300. – MyTitle

Antwort

4

Ihr Problem scheint dies zu sein : Ihre intermediären Scala-Dateien sind nicht korrekt codiert. Hier

ist der Prozess:

Wiedergabe nimmt Ihre Template-Datei (foo.scala.html) und übersetzt diese in Scala: target/scala-2.10/src_managed/main/views/html/foo.template.scala. Dies wird dann von sbt in .class-Dateien kompiliert und von play abgespielt.

Wenn sbt diese Zwischendateien erstellt, erstellt es sie mit der Standardcodierung (in meinem Fall eine Windows-Maschine, so UTF-8 ohne BOM - Ihr Computer kann sich unterscheiden). Wichtig ist, dass diese Kodierung erhalten bleibt. Selbst wenn ich die Kodierung der ursprünglichen Vorlagendatei (foo.scala.html in UTF-16) ändere, ist die Kodierung der .scala-Datei immer noch dieselbe (UTF-8 ohne BOM in meinem Fall). Die Datei wird jedoch nicht mehr kompiliert, da die Datei nicht gelesen werden kann, da der Scala-Compiler ITF-8 erwartet.

Die 'richtige' Lösung ist immer UTF-8 zu verwenden, und tatsächlich war dies die für Play 1.x empfohlene Lösung, siehe Play documentation Internationalization. Hier ist das Äquivalent für play 2. Sie können auch normale Internationalisierungs-Nachrichtendateien verwenden.

Also, wenn Sie

JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF8' sbt 

angeben, wie Bjorn vorgeschlagen, dann wird dieser SBT sagen, dass alle Dateien, die es liest und schreibt in UTF8 sein. Sie können auch die Dateicodierung für den Scala-Compiler in Ihrem Build angeben.scala:

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

Dies teilt dem scala-Compiler, der alle Dateien, die es liest (das heißt die foo.template.scala) in UTF-8 codiert sind. Wenn Sie dies auf Ihre Standardcodierung einstellen, funktioniert dies möglicherweise ebenfalls.

Ihre beste Wette ist es, eine sbt-Reinigung durchzuführen, um sicherzustellen, dass die problematischen Dateien verschwunden sind, und wie oben vorgeschlagen mit JAVA_TOOL_OPTION neu zu starten. Sie müssen jedoch sicherstellen, dass all Ihre Builds dies berücksichtigen (Jenkins, andere Entwickler usw.).

2

Das folgende funktioniert gut für mich. Codierte in utf-8 default von Eclipse (scala-ide)

@(message: String) 

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

} 
2

Welche Editor Sie diese Dateien speichern verwenden? Möglicherweise gibt es eine Möglichkeit, dass Ihre Zeichen doppelt codiert sind und somit falsch als UTF-8 gespeichert sind. Z.B. In iso-8859-1 codierte Zeichen werden erneut als UTF-8 codiert.

+0

Ich triied Intellij IDEA und Notepad ++ – MyTitle

5

Sie könnten versuchen, SBT mit erzwungener Codierung zu UTF-8 zu starten. Ich las in diesen post, dass für einige Leute es half SBT beginnen mit der folgenden Option:

JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF8' 

Dann wird eine der ersten Zeilen von SBT angezeigt werden soll:

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

wird versuchen, bald Ihre Lösung – MyTitle

+0

@Mytitle gegeben Ihre Beschreibung des Problems, das ist wahrscheinlich die Lösung –

1

Ich hatte dieses Problem und fand heraus, dass es durch einige Zeichen meiner Muttersprache verursacht wurde, die ich in den Kommentaren hatte (ã). Ich entfernte diese und der Fehler verschwand.