Javaにおいて文字コードを意識する箇所を簡単に説明します。
Java内部では文字は全てUnicodeで処理されています。ですが例えば、あるファイルをServletから読み込む場合ファイルはShift_JISで書かれていたとすればShift_JIS<->Unicodeの変換を行わなければJava内部では文字列として使用することができません。
例のようにJavaは外部にI/Oする際に文字コードの変換が発生します。この変換する文字コードが指定されていない場合、Javaでデフォルトとなっている文字コードを使用しますが、デフォルトの文字コードはJavaが動作しているOS環境によって異なります。(Windowsであればwindows-31j、LinuxであればEUC-JP等)
Servlet(Java)への主なI/Oについて概要図を示します。
次節以降の表中で使用する用語について説明します。
使用できる文字コードはJavaのプラットフォームにより異なります。Javaのマニュアルにてご確認ください。
文字コードの設定箇所と、それぞれの優先順位を記述します。
リクエストのデータをどの文字コードとして扱うかは通常、以下の処理順で決定されます。ここで決定された文字コードはリクエストからデータを取得する際のInputStreamに適用されます。
| 優先度 | 設定項目名 | 説明 | 設定場所 | 有効範囲 | 反映方法 |
|---|---|---|---|---|---|
| 1 | setCharcterEncoding設定 | Filter等でリクエストデータを参照する前に、HttpServletRequest.setCharcterEncoding()により文字コードを設定した場合、その文字コードとしてリクエストデータをUnicodeに変換します。 | ユーザロジック | Webアプリケーション | 再配備 |
設定例
:
((HttpServletRequest)request).setCharcterEncoding("Shift_JIS");
:
|
|||||
| 2 | HTTPリクエストcharset設定 | HTTPリクエストのヘッダ情報にcharset指定がある場合、その文字コードでリクエストデータをUnicodeに変換します。 | なし | Webアプリケーション | 再配備 |
| 詳細説明 ブラウザ等クライアントアプリケーションに依存しますがHTTPリクエストヘッダにcharset指定がある場合の動作になります。 "Content-Type: application/x-www-form-urlencoded; charset=windows-31j" 等 |
|||||
| 3 | NEC配備記述子charset設定 | HTTPリクエストのヘッダ情報にcharset指定が無い場合、nec-web.xmlファイルに<locale-charset-info>要素を設定し、warファイルに予めアーカイブすることでリクエストデータのUnicode変換に用いるデフォルトの文字コードを設定することができます。 | nec-web.xml | Webアプリケーション | 再配備 |
設定例
<nec-web-app>
:
<locale-charset-info>
<parameter-encoding form-hint-field="penc" default-charset="windows-31j"/>
</locale-charset-info>
:
|
|||||
| 4 | デフォルト設定 | 上記のいずれも無い場合、リクエストデータはデフォルトの文字コード"ISO-8859-1"を用いてUnicodeに変換されます。 | -- | -- | -- |
| 設定例 -- |
|||||
レスポンスにデータをどの文字コードとして出力するかは通常、以下の処理順で決定されます。ここで決定された文字コードはHTTPレスポンスのヘッダ情報(Content-Typeのcharset)とデータを出力する際のOutputStreamに適用されます。
| 優先度 | 設定項目名 | 説明 | 設定場所 | 有効範囲 | 反映方法 |
|---|---|---|---|---|---|
| 1 | 文字コード優先設定 | Webアプリケーション毎にHTTPレスポンスに優先的に使用される文字コードを設定します。 | nec-web.xml | Webアプリケーション | 再配備 |
設定例
<nec-web-app>
:
<property name="priorityResponseEncoding-map:ja" value="EUC-JP"/>
:
<property name="priorityResponseEncoding" value="windows-31j"/>
設定は両方設定することも片方のみ設定する事も可能です。前者はHTTPレスポンスのロケールが一致した場合、Mapされた文字コードを適用します。 後者はHTTPレスポンスで使用する文字コードを固定で設定します。 両方が設定され場合、前者のMap設定の優先度が高くなります。 |
|||||
| 2 | 文字コード優先設定 | ドメイン(またはプロセスグループ)にHTTPレスポンスに優先的に使用される文字コードを設定します。 | domain.xml | ドメイン | ドメイン(プロセスグループ)再起動 |
設定例otxadminコマンド set server.web-container.property.priority-response-encoding=EUC-JP |
|||||
| 3 | 配備記述子文字コード設定 | Servlet2.4の仕様でロケールおよび文字エンコードのマッピングをweb.xmlに設定できます。 javax.servlet.ServletResponseのsetLocale()メソッドが呼ばれた時に参照され、設定した ロケールに対応する文字コードが設定されます。 レスポンスデータをUnicodeから設定された文字コードに変換してレスポンス出力します。 |
web.xml | Webアプリケーション | 再配備 |
設定例
<web-app>
:
<locale-encoding-mapping-list>
<locale-encoding-mapping>
<locale>ja</locale>
<encoding>windows-31j</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>ko</locale>
<encoding>EUC-KR</encoding>
</locale-encoding-mapping>
</locale-encoding-mapping-list>
:
|
|||||
| 4 | setCharacterEncoding設定 | ServletResponseのsetContentType()またはsetCharacterEncoding()にてcharsetが設定された場合、レスポンスデータをUnicodeから設定された文字コードに変換してレスポンス出力します。 | ユーザロジック | Webアプリケーション | 再配備 |
設定例
:
((HttpServletResponse)response).
setContentType("text/html; charset=Shift_JIS")
:
|
|||||
| 5 | デフォルト設定 | 上記の設定が無い場合、レスポンスデータをUnicodeからデフォルトの文字コード"ISO-8859-1"に変換してレスポンス出力します。 | -- | -- | -- |
| 設定例 -- |
|||||
JSPファイルがどの文字コードで記述されているか(読み込み時どのエンコーディングでデコードするか)は通常、以下の処理順で決定されます。 ここで決定された文字コードはJSPファイルを読み込む際のInputStremに適用されます。
| 優先度 | 設定項目名 | 説明 | 設定場所 | 有効範囲 | 反映方法 |
|---|---|---|---|---|---|
| 1 | 優先文字コード設定 | Webアプリケーション毎にJSPファイルのコンパイルに優先的に使用される文字コードを設定します。 | nec-web.xml | Webアプリケーション | 再配備 |
設定例
<nec-web-app>
:
<jsp-config>
<property name="priorityJspInEncoding" value="EUC-JP"/>
</jsp-config>
:
|
|||||
| 2 | 優先文字コード設定 | ドメイン(またはプロセスグループ)にJSPファイルのコンパイルに優先的に使用される文字コードを設定します。 | domain.xml | ドメイン(プロセスプロセスグループ) | ドメイン(プロセスプロセスグループ)再起動 |
設定例otxadminコマンド set server.web-container.property.priority-jsp-in-encoding=EUC-JP |
|||||
| 3 | JSPファイルpageEncoing設定 | JSPファイルにpageEncoing設定が記述されている場合、その文字コードでJSPファイルを読み込みUnicodeに変換します。 | ユーザロジック | JSPファイル | 再配備 |
設定例
<%@ page pageEncoding="windows-31j"%>
:
|
|||||
| 4 | JSPファイルcontentType設定 | JSPファイルにpageEncoing設定が無くcontentType設定(charset指定)が記述されている場合、その文字コードでJSPファイルを読み込みUnicodeに変換します。 | ユーザロジック | JSPファイル | 再配備 |
設定例
<%@ page contentType="text/html;charset=windows-31j"%>
:
|
|||||
| 5 | 配備記述子設定 | JSP2.0の仕様でJSPファイル読み込み時の文字コードをweb.xmlに設定できます。contentType設定(charset指定)が無い場合、web.xmlで設定した文字コードでJSPファイルを読み込みUnicodeに変換します。 | web.xml | Webアプリケーション | 再配備 |
設定例
<web-app>
:
<jsp-config>
<jsp-property-group>
<url-pattern>/jsp/*</url-pattern>
<page-encoding>Shift_JIS</page-encoding>
</jsp-property-group>
</jsp-config>
:
|
|||||
| 6 | デフォルト文字コード設定 | pageEncoing設定、contentType設定が共に無い、web.xmlの設定も無い場合、デフォルトの文字コードが使用されますが、そのデフォルト文字コードを変更することができます。 | domain.xml | ドメイン(プロセスプロセスグループ) | ドメイン(プロセスプロセスグループ)再起動 |
設定例otxadminコマンド set server.web-container.property.default-encoding=Shift_JIS |
|||||
| 7 | デフォルト設定 | 上記のいずれの設定も無い場合、JSPファイルはデフォルトの文字コード"ISO-8859-1"で読み込まれUnicodeに変換されます。 | -- | -- | -- |
| 設定例 -- |
|||||
出力するレスポンスデータはどのUnicodeから文字コードに変換するかは通常、以下の処理順で決定されます。 ここで決定されたエンコーディングはレスポンスのヘッダ情報(Content-Typeのcharset)と出力する際OutputStreamに適用されます。
| 優先度 | 設定項目名 | 説明 | 設定場所 | 有効範囲 | 反映方法 |
|---|---|---|---|---|---|
| 1 | 優先文字コード設定 | Webアプリケーション毎にJSPファイルのレスポンスに優先的に使用される文字コードを設定します。 | nec-web.xml | Webアプリケーション | 再配備 |
設定例
<nec-web-app>
:
<jsp-config>
<property name="priorityJspOutEncoding" value="EUC-JP"/>
</jsp-config>
:
|
|||||
| 2 | 優先文字コード設定 | ドメイン(またはプロセスグループ)にJSPファイルのレスポンスに優先的に使用される文字コードを設定します。 | domain.xml | ドメイン(プロセスプロセスグループ) | ドメイン(プロセスプロセスグループ)再起動 |
設定例otxadminコマンド set server.web-container.property.priority-jsp-out-encoding=EUC-JP |
|||||
| 3 | setContentType設定 | JSPファイルにcontentType設定(charset指定)が記述されている場合、レスポンスデータをUnicodeから設定文字コードに変換してレスポンス出力します。 | ユーザロジック | JSPファイル | 再配備 |
設定例
<%@ page contentType="text/html;charset=windows-31j"%>
:
|
|||||
| 4 | デフォルト文字コード設定 | contentType の設定が無い場合、デフォルトの文字コードが使用されますがそのデフォルト文字コードを変更することができます。 | domain.xml | ドメイン | ドメイン再起動 |
設定例otxadminコマンド set server.web-container.property.default-encoding=Shift_JIS |
|||||
| 5 | デフォルト設定 | 上記のいずれの設定も無い場合、JSPのレスポンスデータをUnicodeからデフォルトの文字コード"ISO-8859-1"に変換してレスポンス出力します。 | -- | -- | -- |
| 設定例 -- |
|||||
RFC3986仕様より、URL 中に書くことが許されているのは、半角アルファベット、数字と以下の(半角)記号です
| . $ , ; : & = ? ! * ~ @ # _ - ( ) [ ] |
またURLのコンテキスト名以降の各パーツで使用可能な文字を記述します。
http://<server名>:<ポート名>/<コンテキスト名>/<パス>/<サーブレット名>?<パラメータ>
半角アルファベット、数字と以下の(半角)記号が使用可能です。
| . $ ! ~ - _ ( ) |
半角アルファベット、数字と以下の(半角)記号が使用可能です。
| . $ , : = ! * ~ @ - _ ( ) [ ] |
半角アルファベット、数字と以下の(半角)記号が使用可能です。
| . $ , ! ~ @ - _ ( ) [ ] |
半角アルファベット、数字と以下の(半角)記号が使用可能です。
| . $ , & = ! ~ @ - _ ( ) [ ] |
| . $ , ; : ? ! * ~ @ - _ ( ) [ ] |
| . $ , ; : = ? ! * ~ @ - _ ( ) [ ] |
Webにおける認証(Basic/Form認証等)に使用するアカウント/パスワードについて記述します。
要素名、属性名の使用可能文字はXMLの仕様に従います。値にも次の文字は使用できません。
| < & > |
| < & > " ' |