JSPの基礎知識

JSPで日本語を扱うときの留意点について教えてください

テンアートニ 浅井秀一
2001/3/29

 JSPで日本語を含むコンテンツを作成する場合、pageタグに記述するエンコーディングの指定に注意が必要です。

 JSP1.1の仕様では、pageタグのcontentTypeに指定するエンコーディングと同じエンコーディングでJSPのファイルを作成することが規定されています。

 JSPコンパイラはcontentTypeに指定されたエンコーディングをJSPファイルのエンコーディングと理解しUnicodeの文字列に変換します。よって、出力エンコーディングとJSPの作成に使用したエンコーディングが異なると文字化けが起こります。

 例えば、Windows上の通常のエディタで以下のようなJSPを作成し動作させた場合、文字化けが起こります。

<%@ page contentType="text/html; charset=ISO-2022-JP" %>
<HTML>
<HEAD><TITLE>テスト</TITLE> </HEAD>
<BODY>
<H1>これはテストJSPです</H1>
日時:<%= new java.util.Date() %>
</BODY>
</HTML>

 このJSPはWindows上で作成されたので、SJISでエンコードされていますが、pageタグに指定されたエンコーディングはISO-2022-JPです。JSPコンパイラはこのJSPに記述された文字列をISO-2022-JPでエンコードされた文字列だと判断しUnicodeに変換します、しかし、実際にはSJISでエンコードされている文字列なので、この変換時に文字化けが起きてしまうわけです。

 ところで、出力エンコード形式のデフォルト値は ISO-8859-1(ラテン文字)なので、pageタグを指定しないで日本語を扱ったJSPを作成した場合も文字化けします。

 こういった文字化けを防ぐためには、Windows上などで作成したSJIS形式のJSPファイルにはcharset=Shift_JIS、Linux上などで作成したEUC_JP形式のJSPファイルにはcharset=EUC_JPというように、pageタグに指定するエンコーディングを、作成するファイルのエンコーディングに合わせることが必要です。

 ただし、例えばLinux上で実行するためには必ずEUC_JPを指定しなければいけないというわけではなく、pageタグに指定したエンコーディングと、JSPファイル自体のエンコーディングが統一されていれば、Windowsで作成したSJISでエンコードされたJSPを、エンコード形式の変更なしにLinuxなどのほかのOS上で動作させても文字化けは起こりません。

 

「Java Solution FAQ」



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間