Java は API の数が膨大な為、微小な仕様に気づきにくい事があります。
Google App Engine for Java でサーブレットを作成し「日本語を出力しよう!」
と挑んだものの、意外とハマってしまいがち。
Eclipse で作成する場合は通常、ソースコードはすべて UTF-8 になります。
Google App Engine が対応している文字コードも UTF-8 です。
以下のコードはほとんどの場合、日本語(マルチバイト文字)が文字化けし、
「?????」と表示されます。
public void doGet( HttpServletRequest req, HttpServletResponse resp ) |
どこに問題があるか気づいたでしょうか?
これを解決するヒントは getWriter() と setCharacterEncoding() の API 解説が
参考になります。
答えは、
getWriter() を呼び出した後に、setCharcterEncoding() をコールしても
無視される
という仕様が理由になります。また getOutputStream() と getWriter() は合わせて
コールすることが出来ませんので、以下のコードは例外が発生します。
public void doGet( HttpServletRequest req, HttpServletResponse resp ) |
Eclipse で日本語が出力されないという方は、上記の点を踏まえて確認して
みましょう。ソースの文字コードは、右クリックの「プロパティ」で
確認できます。
Eclipse で開発していると http://localhost:8888/ への反映が行われないことも
よく見かけますが、この場合 javaw.exe を一旦 kill した後、サーブレットを起動
すると反映されることが多い。
kill するには psr または taskkill を用いてプロンプトから消しましょう。
psr /c kill /n javaw.exe /a => javaw.exe を全て強制終了させる。
ハイスペックPC でも Eclipse は起動の重さがありますね…。
0 コメント:
コメントを投稿