Entries

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事にトラックバックする(FC2ブログユーザー)
http://wakpak.blog.fc2.com/tb.php/5-72a0e739

トラックバック

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

Javaで文字化けしてしまった時の対処法まとめ

Google App EngineでちょっとしたWebアプリを作っていた際に
サーブレットからのレスポンスで文字化けして困ってしまったので
その対策をいろいろとメモ

今回作っていたのはHTMLファイルからAjax通信でサーバーに問い合わせて
サーバー側でWebAPIを介して別のサイトから取得したデータを返却するというもの。

HTML側のソースコードはこんな感じ

$.ajax({
type: "GET",
url: urlString,
beforeSend : function( xhr ){
xhr.setRequestHeader("If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT");
},
error : function(){
$("#result").html("通信エラーが発生しました。");
},
success: function(html){
$("#result").html(html);
}
});



<文字化けの具体的な対策>

1 「JSPやHTMLなど各種ファイルの文字エンコードを揃える。理想はUTF-8」
 異なるエンコードのファイルが混ざっていると文字化けすることがあるようなので、
 ファイルの文字エンコードを揃えるのは基本中の基本。

2 「全角文字だけが?になる場合はレスポンスの文字エンコーディングを設定」
  res.setContentType("text/html");
  res.setCharacterEncoding("UTF-8");
まとめて1行に書いてしまってもOK
  res.setContentType("text/html; charset=UTF-8");
 ※記述する順番が重要!
  res.getWriter().println("該当データなし");
 上のようなコードでレスポンスに文字をセットしてしまってからsetCharacterEncodingで設定しても
 デフォルトの文字コード(Tomcatの場合は、ISO-8859-1)のまま更新されない。

3 「WebAPIなどで別のサイトから読み込んだデータの全角文字が□みたいな文字に化けるとき」
 一番ハマったのはココ。
  URL url = new URL(urlString);
  BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
 上記のコードで対象のURLからデータを読み込んだ際に別の文字コードと解釈されて文字化けしていた。
 文字化け解消のためのコードはこちら↓↓↓
  URL url = new URL(urlString);
  BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
 明示的に文字コードを設定するだけでOKだった。
関連記事
この記事にトラックバックする(FC2ブログユーザー)
http://wakpak.blog.fc2.com/tb.php/5-72a0e739

トラックバック

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

Appendix

プロフィール

wakpak

Author:wakpak
関西圏で働く技術者です。

世の中の表も裏も興味深々。勝手気ままに記事を書くため更新は不定期です。

最新トラックバック

検索フォーム

ブロとも申請フォーム

この人とブロともになる

QRコード

QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。