今まで4回にわたって文字コードに関する問題を解説してきた。ここでいったん,今まで説明した文字コードによる問題を一覧表としてまとめよう。
表1●文字コードに起因する問題のまとめ
問題の発生個所 | 問題の原因 | 対策 |
---|---|---|
文字集合 | 多対一の変換 | 文字集合の変換をしない |
文字エンコーディング | 不正なエンコーディング | 入力値をチェックする |
不完全な日本語処理 | 正しいマルチバイト文字の処理を行う アプリケーションでの処理 マルチバイト文字に対応した処理系 |
これらの対策のうち,ここでは「文字集合の変換を伴う変換をしない」など,アプリケーション全体の文字コードの取り扱いについて上流工程で留意すべき内容について説明しよう。「入力値のチェック」については次回以降,「入力値の検証」の項で詳しく説明する。「アプリケーションでの正しいマルチバイト文字の処理」については,個別の処理内容の項で説明する。
文字コードの取り扱いについて,上流工程で留意すべき点としては,次の三つが挙げられる。
- 要求仕様として文字集合を定義する
- 端末がサポートする文字集合を確認する
- 実装に用いる文字エンコーディングを決定する
まずアプリケーション仕様として,処理対象となる文字集合を規定する必要がある。日英語以外の韓国語や中国語,アラビア語などの対応が必要な場合はUnicodeを選択するしかない。さらに日本語だけの場合でも,例えばJIS X 0201+JIS X 0208はJIS第2水準まで,JIS X 0201+JIS X 0213はJIS第4水準までというように,文字集合によって使える漢字の種類が異なる(表2)。このため,どこまでの漢字に対応するかを要求仕様として決定する必要がある。
表2●各文字集合が扱える文字の種類
対象文字 | 文字集合 | 文字エンコーディング |
---|---|---|
英字,JIS第2水準までの漢字 | JIS X 0201+JIS X 0208 | EUC-JP,UTF-8 |
同上+NEC IBMの拡張文字 | マイクロソフト標準キャラクタセット | EUC-JP,UTF-8 |
英字,JIS第4水準までの漢字 | JIS X 0201+JIS X 0213 | UTF-8 |
韓国語,中国語,アラビア語… | Unicode | UTF-8 |
JIS第3,4水準に対応する文字エンコーディング規格としてはShift_JISの拡張版であるShift_JIS-2004などが規定されているが,これらはWindowsなどではサポートされていない。このため,Windows上でJIS X 0213の漢字を使用するには,Unicodeを利用することになる。
端末側の対応できる文字集合を確認する
次に考慮すべき項目は,ユーザーが利用するOSやブラウザ,その他のソフトウエアの種類と,それらが対応する文字集合である。
例えばWindowsを対象とする場合でも,Windowsのバージョンによって対応する文字集合が異なる。Windows VistaはUnicode 3.2,Windows XPはUnicode 3.0という具合だ(表3)。
表3●代表的な Windows と Unicode,および JIS の関係
「JIS X 0213:2004/Unicode 実装ガイド」より引用
Windows のバージョン | Unicode のバージョン | 対応 JIS 規格 |
---|---|---|
Windows 98 | 非対応 | JIS X 0208:1990 JIS X 0212:1990 |
Windows NT 4.0 SP 4 | Unicode 2.0 | |
Windows 2000 | Unicode 2.1 | |
Windows XP | Unicode 3.0 | |
Windows Server 2003 | ||
Windows Vista | Unicode 3.2 | JIS X 0208:1990 JIS X 0212:1990 JIS X 0213:2004 |
Mac OS X やLinuxなどをサポートする場合は,対象OSやディストリビューションが対応している文字集合を確認する。さらに,電子メールへの対応や携帯電話のブラウザを対象とする場合は,個別の対応が必要となる。
日本語の電子メールの文字エンコーディングにはISO-2022-JPが広く利用されている。携帯電話に搭載されるブラウザには伝統的にShift_JISが使われてきた。最近でこそ電子メール・クライアント(メーラー)や携帯電話向けブラウザにもUTF-8対応のものが増えてきたが,非対応のソフトもまだ多数使用されている。この状況を考えると,不特定多数を対象とするサービスでは,今まで通りJIS系の文字エンコーディングを使用する方が無難だろう。
このように,Webアプリケーション開発言語がUnicode対応を進める一方で,JIS系文字エンコーディングにも対応しなければならない。