企業IT最適化のゴールを目指す

Webシステムにおける「文字コード変換の落とし穴」Java Review(1/2 ページ)

一般的にWebシステムは、データベースやレガシーシステムなどと連携することが多い。しかもJavaアプリケーションの文字コードとしてはUnicodeが使用されるため、システム間での文字エンコーディング変換が必要になり、文字コードに関するトラブルも後を絶たない。今回は、アプリケーション作成時やシステム設定時のエンコーディング変換に関して考慮するべき点を解説する。

» 2009年09月09日 08時00分 公開
[友成文隆(日立製作所),ITmedia]

エンコーディング変換による問題

 画面を表示したり、印刷をしたりした場合などに、「文字」に関して次のようなトラブルが発生したことはないだろうか?

  1. 意味不明な文字に化ける(文字化け)
  2. 同じ読みの異なる漢字になる(字形差)
  3. Windows Vista上でJIS第3水準の漢字を入力したらエラーが発生した

 まずは、なぜこのような問題が発生するかについて説明する。

 アプリケーションやシステムで複数のエンコーディングを使用している場合、エンコーディングの変換が必要となる。エンコーディング変換は、アプリケーションやシステムに情報を受け渡すために必要な処理だ。例えば、シフトJISを扱うシステムとUnicodeを扱うシステムが連携する場合、文字コードの変換つまりエンコーディング変換しないとデータのやり取りができない。つまり、上で紹介したような文字にかかわるトラブルは、エンコーディング変換がうまくいかなかった時に発生するのだ。

 Webシステム上でJavaを実行する場合も、当然エンコーディングについて考慮する必要がある。Javaでは内部的にUnicodeが使用される。このため、Webブラウザからデータが送信されると、アプリケーションサーバの入り口でUnicodeに変換してからWebシステム内のアプリケーションへ渡される。また、文字エンコーディングがEUCのデータベースと接続するWebシステムの場合には、データベースアクセス時にUnicodeからEUCに変換される。先に述べた文字化けや字形差などの問題は、これらのエンコーディング変換時に発生する。

 では、エンコーディング変換が行われるタイミングと、アプリケーション開発時の留意点などを紹介しよう。

Webシステムでのエンコーディング変換個所と設定に関する注意点

 Webシステムにおいて、エンコーディング変換が発生する個所は、下図のとおりである。図中に示した番号に従い、エンコードの変換が行われる。

Webシステムでのエンコーディング変換個所 Webシステムでのエンコーディング変換個所
  1. Webブラウザから送信された文字列にシフトJISなどのエンコーディングが使用されている場合で、サーブレットやJSPがWebコンテナ上で実行する時には、シフトJISはUnicodeへと変換される
  2. データベースとデータをやり取りする時には、データベース格納文字コードとの間でエンコーディング変換される
  3. 出力結果をWebブラウザに返す時に、Unicodeからレスポンスで使用する文字コードへと、エンコーディング変換される

 Webコンテナ(図中「1」および「3」)でのエンコーディング変換では、サーブレットおよびJSPに設定した文字エンコーディングが適用される。次の表に、サーブレットおよびJSPで文字エンコーディングを設定する際に注意する点についてまとめる。

 さらに、データベースとの間(図中「2」)では、データを受け渡す場合、JDBCドライバなどに設定した文字エンコーディングの内容が適用される。これは、データベース以外のレガシーシステムに接続する場合にも同様のことが言える。

なお、ベンダーによっては、エンコーディング変換の機能をライブラリとして提供している場合もある。このようなライブラリは、アプリケーションで明示的にエンコーディング変換を行いたいときに使用すると便利だ。

 また、エンコーディング変換では、アプリケーションを実行する環境も考慮する必要がある。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ