プログラミング Java

pageEncodingとcontentTypeのcharsetの違い

投稿日:

pageEncodingとcontentTypeのcharsetは処理されるタイミングが異なります。
それによって文字化けの原因につながっているので、どのように設定すればいいかを解説していきます。

違いは処理のタイミング

pageEncoding

JSPファイルからServletを生成する際の文字コード
・JSPは内部的にはjavaファイル(Servlet)に変換されて、
out.writeメソッドでHTML出力されます。
(例)🍔がUTF-8でエンコードされて出力されている。

Javaファイル出力先
[Eclipseのルートディレクトリ]\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\[プロジェクト名]\org\apache\jsp

出力ファイル名
[JSPファイル名]_jsp.java

 

contentType

ブラウザが解釈する際の文字コード
・レスポンスヘッダーに設定される文字コードとなるため、ブラウザ上での文字コード設定になります。

 

処理の順番

アプリケーションサーバ側で、JSPがServletに変換される。(pageEncoding)

ブラウザからJSPへアクセスする(リクエスト)

ブラウザにJSPの画面が表示される(レスポンス)(contentType)

 

検証データ

🍔
文字コードがUTF-8で表示される絵文字(Shift_JISだと文字化けするもの)
これがどの設定パターンだと文字化けしないか検証しました。

 

検証ケース

OK:pageEncoding=”UTF-8″, contentType charset=”UTF-8″

JSPから変換されたServlet:🍔
ブラウザの表示:🍔
もちろんこれはOKなケース

NG:pageEncoding=”UTF-8″, contentType charset=”Shift_JIS”

JSPから変換されたServlet:🍔
ブラウザの表示:?
これはブラウザの文字コードを、手動でShift_JISからUTF-8に変換すればよいと思ったのですがNG(?のまま変化しません)でした。

NG:pageEncoding=”Shift_JIS”, contentType charset=”Shift_JIS”

JSPから変換されたServlet:�沚�
ブラウザの表示:?沚?
もちろんこれはNG

NG:pageEncoding=”Shift_JIS”, contentType charset=”UTF-8″

JSPから変換されたServlet:�沚�
ブラウザの表示:?沚?
もちろんこれもNG
Shift_JISでエンコードされた時点で、�沚�のように化けてしまっているので、
これをあとからUTF-8にしてもダメなためです。
補足情報に🍔を文字コードに変換したものを掲載いたしますので、ご確認ください。

 

まとめ

pageEncodingとcontentTypeのcharsetが異なると文字化けの原因になるため、
2つはそろえるようにする。

 

補足情報

contentTypeの設定

・pageEncodingで文字コードの指定がなければ優先される
・HTMLのmetaタグにあるcharsetよりも優先される

%xx形式の🍔

🍔を%xx形式で変換すると以下の文字コードになります。

 

参考サイト

Javaの道:文字化け対策
http://www.javaroad.jp/servletjsp/sj_servlet13.htm

JSPが文字化けしたときの対処法
https://qiita.com/d-yosh/items/c04e0e686f7dc75a8529

文字コード変換
https://www.marbacka.net/msearch/tool.php#str2enc

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

【SpringSecurity】#3~ 独自のログイン画面

概要 オリジナルのログイン画面を実装する方法です。 以下の内容になっています。 ログイン用のHTMLを用意する。 Controllerにログインの遷移先を定義する。 SecurityConfigクラス …

【Javaサンプル】自動販売機を作成(Level1)

Javaの勉強用サンプルです。 テーマは自動販売機。 プログラミング初心者向けに書いています。   自動販売機を題材として選んだ理由 自社研修で行っている 自社研修で自動販売機を作成したので …

【Java】Optionalが処理できないならデフォルト値を返そう

概要 Optionalはnullである可能性を明示的に返してくれる便利なコンテナ・オブジェクトです。 if(obj == null)… といったことをしなくてよくなったのは素晴らしいことだ …

【SpringBoot入門】#8~ 検索機能の実装

概要 ・検索フォームから条件を指定して検索すると、条件に一致する結果が一覧画面に表示される。 ・検索条件は複合的に指定できることとする。 ・検索結果は適切にフォーマットされることとする。  (日付はy …

【Java】MySQLから取得した日付をフォーマット変換して表示する方法

MySQLからSELECTしてきた日付データ(DateTime型)を、 「yyyy年MM月dd日 hh時mm分ss秒」のフォーマットで表示する方法です。 コード [crayon-607f51450c8 …

記事を探す

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。