付録A 文字コード
HTTPは,主にWebサーバからブラウザへデータをダウンロードするために用いられるプロトコルですが,HTMLのフォームの場合などではデータのアップロードにも使われます。
ダウンロードするコンテンツの文字コードをWebサーバからブラウザに伝えるための規格は,Servlet APIでも明確に規定されています。しかし,過去のServlet API(Servlet API 2.2以前)では,HTTPクエリ文字列とHTTPリクエストボディの文字コードの扱いが明確ではなかったため,ベンダによって扱いが異なっていました。
Servlet API 2.3からは,Servlet APIを通してHTTPクエリ文字列やHTTPリクエストボディを参照するときに,文字コードを指定できるようになりました(ただし,エンコードタイプがmultipart/form-dataのHTTPリクエストボディを除きます)。これらのデータは,指定された文字コードのデータと見なされてJavaの内部表現であるUnicodeに変換されてからアプリケーションに渡されます。リソースの文字コードやUnicodeへの文字コード変換が間違っていると,「文字化け」を引き起こす原因になるため,アプリケーション開発時には,実行プロセスやリソースの文字コードを考慮する必要があります。
ここでは,アプリケーションで使用する文字コードと注意事項を示します。また,ブラウザとデータをやり取りする場合の,文字コード変換の注意事項についても示します。