付録A.1 アプリケーションで扱う文字コード
アプリケーションの構成を基に,文字コード変換の流れを示します。
図中の番号((1)〜(5))は,文字コードを考慮する必要のあるプログラムやリソースを表します。また,図中の英字(A〜E)は文字コード変換時のデータの流れを示します。プログラム,リソースで扱う文字コードと注意事項,および文字コード変換の動作と注意事項を,それぞれ表に示します。
プログラム,リソース名 |
項目 |
扱う文字コードおよび注意事項 |
---|---|---|
(1)入力ページ |
URLのパス |
URLのパスの文字コードは,ISO-8859-1である必要があります。シフトJISなどの非ASCII文字は記述できません。 |
クエリ文字列 |
HTMLの<FORM>タグを使用して送信される文字は,フォームを表示しているHTMLページと同じ文字コードでURLエンコードされて送出されます。 |
|
POSTデータ |
||
(2)JSP |
JSP |
任意の文字コードで作成できます。 Webアプリケーションのバージョン2.4以降(JSP 2.0仕様以降)で,JSPドキュメントの文字エンコードを指定する場合は,XML宣言で文字エンコードを指定してください。 JSP 1.2仕様では,JSPの文字コードは,pageディレクティブのpageEncoding属性に記述する必要があります。 |
(3)HTML |
HTML |
任意の文字コードで作成できます。 |
(4)データベース |
データベース |
データベースに格納するデータの文字コードは,ブラウザに表示する文字コードを考慮して決定してください。 |
(5)出力ページ |
レスポンスヘッダ |
ISO-8859-1である必要があります。非ASCII文字を使用する場合は,URLエンコードする必要があります。 |
レスポンスボディ |
ユーザプログラムで任意の文字コードを使用できます。 |
変換個所 |
対象 |
文字コード変換時の動作および注意事項 |
---|---|---|
A ブラウザ〜J2EEサーバ |
URLのパス |
Webコンテナでは,URLのパスの文字コードはISO-8859-1として処理されます。 |
クエリ文字列 |
クエリ文字列またはPOSTデータの文字コードは,アプリケーションで任意に決められます。サーブレット,JSPではUnicodeで扱われるので,アプリケーション内で矛盾のないように文字コードを変換してください。 |
|
POSTデータ |
||
B J2EEサーバ内 |
JSPファイル |
pageディレクティブのpageEncoding属性に記述されたエンコーディングでファイルが読み込まれます。pageEncoding属性が省略されている場合は,contentType属性が使用されます。 |
HTMLファイル |
HTMLファイルの文字コードのままブラウザに送信されます。 |
|
C J2EEサーバ〜データベース |
データベース |
JDBCドライバによって,Unicodeがデータベース格納文字コードに変換されます。 |
D データベース〜J2EEサーバ |
データベース |
JDBCドライバによって,データベース格納文字コードがUnicodeに変換されます。 |
E J2EEサーバ〜ブラウザ |
レスポンスヘッダ |
Webコンテナによって,レスポンスヘッダの文字コードがISO-8859-1に変換されます。 |
レスポンスボディ |
|
- 参考
-
「文字化け」について
アプリケーションの実行環境では,文字コードはUnicodeとして扱われます。このため,ブラウザから送信された文字列は一度Unicodeに変換されます。また,データベースへのアクセス時にはUnicodeとデータベース格納文字コード間の文字コード変換,レスポンス時にはUnicodeからレスポンスの文字コードへの変換をする必要があります。これらの文字コード変換時に適切な変換をしないと,文字化けする原因になります。
これはシフトJISと呼ばれる文字コードに機種依存文字が含まれることや,同じ文字でもUnicodeへの変換結果がほかの文字コードと異なっているもの※があるために発生します。例えば,ブラウザから機種依存文字を含んだ文字データが送信され,これをUnicodeに変換した場合,レスポンス時にこの文字列をシフトJISに変換すると,文字化けする結果となります。
クライアントのOSをWindowsに限定できる場合は,文字コードをシフトJISではなくMS932またはWindows-31Jと指定することで,文字化けを避けられます。
- 注※
-
−,〜,‖,¢,£,¬などの文字が該当します。