-
Notifications
You must be signed in to change notification settings - Fork 0
scala pitfalls : file encoding
Taisuke Oe edited this page Apr 11, 2015
·
1 revision
##ファイルエンコーディングに注意
これは比較的初歩的な話なのですが、Javaを普段使っている人がScalaを使い始めたときにしばしばはまる罠です。基本的には、すぐに気づく話ですが、念のため述べておきます。
(少なくともOracle JDKの)javacでは、特にオプションを指定しない場合、Javaプログラムのファイルエンコーディングを、プラットフォームのデフォルトエンコーディングとみなしてコンパイルしようとします。
一方、scalacでは、特にオプションを指定しない場合、ファイルエンコーディングをUTF-8として解釈します。そのため、たとえば、Windows環境でShift_JISでscalaプログラムを書いた場合、たとえば、
object Hello extends App {
println("はろー")
}
のようなプログラムのファイルエンコーディングがShift_JISだった場合、scalacは
java.io.IOException: MALFORMED[1]
at scala.tools.nsc.io.SourceReader$.decode(SourceReader.scala:137)
at scala.tools.nsc.io.SourceReader.read(SourceReader.scala:91)
...
error: IO error while decoding Hello.scala with UTF-8
Please try specifying another one using the -encoding option
のようなエラーメッセージを吐きます。最後から2番目の行を読めばわかるように、テキストのエンコーディングをデフォルトではUTF-8として解釈しようとして失敗しているわけです。
これを回避するには、
最初からUTF-8でscalaプログラムを書く -encodingオプションを指定する のどちらかを選ぶことになります。前者の場合は自明ですので説明は省きますが、後者の場合、
scalac -encoding Shift_JIS Hello.scala
のように、ファイルエンコーディングを指定してコンパイルすることになります。 どちらを選ぶかはユーザの自由ですが、基本的には、あえて-encodingオプションを使わなければならない理由が無い限り、ScalaプログラムのソースコードはデフォルトのUTF-8にしておくのをお勧めします。