18
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

sbt 実行時に文字コードを UTF-8 に設定する

Last updated at Posted at 2013-03-18

先日、久しぶりに scala + sbt でコードを書いていたら、どうにも compile が通らないという事態がありまして。

状況としては、JVM のデフォルトの文字コードが SJIS やらだったがために、UnmappableCharacterException が発生してしまっていたというもの。

   java.nio.charset.UnmappableCharacterException: Input length = 2
at java.nio.charset.CoderResult.throwException(CoderResult.java:261)
...

java実行時のオプションとして、文字コード UTF-8 を指定することで解決しました。

-Dfile.encoding=UTF-8

sbt 起動する度にオプションで指定するのも微妙なので、sbt の設定ファイルに記述しておくことに。

Windows

コンソールからデフォルトの設定を確認。
Scala 2.9.2 + sbt 0.12.2

$ sbt console

scala> scala.io.Codec.default.charSet
res0: java.nio.charset.Charset = windows-31j

sbt/sbtconfig.txt に

-Dfile.encoding=UTF-8

を追加。

sbt/sbtconfig.txt
# Set the java args to high

-Dfile.encoding=UTF-8  

-Xmx512M

-XX:MaxPermSize=256m

-XX:ReservedCodeCacheSize=128m



# Set the extra SBT options

-Dsbt.log.format=true

設定できているか確認。

$ sbt console

scala> scala.io.Codec.default.charSet
res0: java.nio.charset.Charset = UTF-8

Mac

(3/22 追記)
コメントで指摘していただいたように、起動スクリプトを直接いじるよりは ~/.sbtconfig に設定を記述するほうがスマートだと思います。

(追記ここまで)

コンソールからデフォルトの設定を確認。
Scala 2.10.0 + sbt 0.12.1

$ sbt console

scala> scala.io.Codec.default.charSet
res0: java.nio.charset.Charset = Shift_JIS

sbt 実行ファイル内に

-Dfile.encoding=UTF-8

を追加。

#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec java -Dfile.encoding=UTF-8 -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.12.1/libexec/sbt-launch.jar "$@"

確認は Win と同様に。

Java周りの設定に不慣れなのもあって結構寄り道しちゃったけども、解決方法を調べるのは楽しかった。
これで本筋に戻れる!

18
19
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?