Wed, December 23, 2009
Google App Engine for Java (GAE/J)で Groovlet を使ってHTMLを出力する場合の文字化け対策
GAE/Jの勉強会に参加することになったので、GAE/J + Groovy (Groovlet)の勉強中。 非常に何もかもが順調にいったのだが、文字化けでちょっとはまったのでメモ。
Groovyのソースコードに直接日本語を書く場合はエンコーディングを指定せよ
コマンドラインから実行する場合は、groovy -c UTF-8 のようにして文字コードを指定すれば よいことがわかっていて、いつもその方法で問題を回避していたのだが、 今回はGAE/J上で動いているGroovy(Groovlet)。ここに直接書いた日本語が文字化けしてしまった。
ローカル環境でテストしたときは化けてはいないから環境変的な何かの設定が Googleのサーバ上とこちらのローカルで異なっているのだろう...と。
Googleで検索したところ回答がありました。
groovyでスクリプトのエンコーディングを指定する
Javaのシステムプロパティ file.encoding をUTF-8にすればよい
文字化けしていないローカルで file.encoding がどんな値になっているか調べるコード。
Test.java
public class Test {
public static void main(String[] args) {
System.out.println("file.encoding=" + System.getProperty("file.encoding"));
}
}
実行してみると...
$ javac Test.java
$ java Test
file.encoding=UTF-8
ということで UTF-8 に設定しておけばよい。問題は、GAE/Jでどうやって設定するのかと。
WEB-INF/appengine-web.xml で指定
以下のような記述を追加してやればOK.
<system-properties>
<property name="file.encoding" value="UTF-8"/>
</system-properties>
これだけで、文字化け直りました。 すばらしい!