一般的にWebシステムは、データベースやレガシーシステムなどと連携することが多い。しかもJavaアプリケーションの文字コードとしてはUnicodeが使用されるため、システム間での文字エンコーディング変換が必要になり、文字コードに関するトラブルも後を絶たない。今回は、アプリケーション作成時やシステム設定時のエンコーディング変換に関して考慮するべき点を解説する。
画面を表示したり、印刷をしたりした場合などに、「文字」に関して次のようなトラブルが発生したことはないだろうか?
まずは、なぜこのような問題が発生するかについて説明する。
アプリケーションやシステムで複数のエンコーディングを使用している場合、エンコーディングの変換が必要となる。エンコーディング変換は、アプリケーションやシステムに情報を受け渡すために必要な処理だ。例えば、シフトJISを扱うシステムとUnicodeを扱うシステムが連携する場合、文字コードの変換つまりエンコーディング変換しないとデータのやり取りができない。つまり、上で紹介したような文字にかかわるトラブルは、エンコーディング変換がうまくいかなかった時に発生するのだ。
Webシステム上でJavaを実行する場合も、当然エンコーディングについて考慮する必要がある。Javaでは内部的にUnicodeが使用される。このため、Webブラウザからデータが送信されると、アプリケーションサーバの入り口でUnicodeに変換してからWebシステム内のアプリケーションへ渡される。また、文字エンコーディングがEUCのデータベースと接続するWebシステムの場合には、データベースアクセス時にUnicodeからEUCに変換される。先に述べた文字化けや字形差などの問題は、これらのエンコーディング変換時に発生する。
では、エンコーディング変換が行われるタイミングと、アプリケーション開発時の留意点などを紹介しよう。
Webシステムにおいて、エンコーディング変換が発生する個所は、下図のとおりである。図中に示した番号に従い、エンコードの変換が行われる。
Webコンテナ(図中「1」および「3」)でのエンコーディング変換では、サーブレットおよびJSPに設定した文字エンコーディングが適用される。次の表に、サーブレットおよびJSPで文字エンコーディングを設定する際に注意する点についてまとめる。
さらに、データベースとの間(図中「2」)では、データを受け渡す場合、JDBCドライバなどに設定した文字エンコーディングの内容が適用される。これは、データベース以外のレガシーシステムに接続する場合にも同様のことが言える。
なお、ベンダーによっては、エンコーディング変換の機能をライブラリとして提供している場合もある。このようなライブラリは、アプリケーションで明示的にエンコーディング変換を行いたいときに使用すると便利だ。
また、エンコーディング変換では、アプリケーションを実行する環境も考慮する必要がある。
Copyright © ITmedia, Inc. All Rights Reserved.