プログラミング 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


関連記事

【Java入門】繰り返し処理(while, for)

概要 繰り返し処理の制御構造について学んでいきましょう。 繰り返しには以下があります。 while(条件に一致する間だけ繰り返す) do-while(一度必ず実行し、その後は条件に一致する間だけ繰り返 …

【Java入門】Javaの開発環境を準備しよう!

概要 これからJavaの勉強をしようとする方向けにJavaの開発環境を準備する手順をご説明します。   環境構築 Eclipseのダウンロード IDE(統合開発環境)のEclipseをダウンロードしま …

【Bootstrap】共通ヘッダーをナビバーとしてデザインしよう!

概要 ヘッダーをナビバーとして実装します。 (SpringBootチュートリアルの共通ヘッダーを基に解説していきます) また、デザインはBootstrapのサンプルを基にしていますので、 そちらも一度 …

【Java】HashSet、LinkedHashSet、TreeSetの違い

概要 重複しないリストは、「Setに格納することで重複を除外してくれる」というのは多くの記事で紹介されています。 ここでは、Setに格納した後のデータの並び順も考慮したいという要件に対応するために、3 …

【Java入門】起動パラメータを付けて起動してみよう!

概要 Javaプログラムを起動する際に、何らかのパラメータ(値)を付けて起動することができます。 今はこのメリットがわからないと思いますが、そういうことができるんだなというレベルで理解しておいて頂けれ …

SpringFramworkの良書

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

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