2004年に制定された最新の文字コード規格「JIS X 0213:2004(通称:JIS2004)」。このJIS2004に対応したWindows Vistaがリリースされて,早1年が経過した。JIS2004自体は,フォントやIMEの普及に合わせて,ユーザーに順調に浸透している。しかし,ユーザーからのデータを受け取る企業情報システムの側では,JIS2004への対応が進んでいないのが実情だ。なぜJIS2004への対応が進まないのか。その現状をまとめてみよう。

 JIS X 0213:2004(JIS2004)は,2004年に制定された最新の文字コード規格。過去の文字コード規格に対して多くの文字を追加しており,従来扱えなかった日本の地名・人名などが表現できるようになった(JIS X 0213の概要や,2004年に改訂された経緯については,ITproの記事「VistaでUnicode以外の選択肢はなかったのか?」を参照)。

Windows XPでも使えるJIS2004

 マイクロソフトが2007年1月にリリースしたWindows Vistaは,JIS2004に対応している。Windows Vistaには,JIS2004の字形に対応したフォント(メイリオやMS明朝/ゴシック/P明朝/Pゴシックなど)が標準搭載されているほか,同OSの標準日本語入力システム(MS-IME)が,変換候補としてJIS2004における追加文字を「環境依存文字(Unicode)」という注意書き付きで出力するようになった。

 実は,Windows XPやWindows Server 2003でも,JIS2004への対応が進んでいる。マイクロソフトは2007年2月から,同社のWebサイト「Windows/Microsoft Update」でJIS2004に対応したMS明朝/ゴシック・フォントの配布を開始している。また,同社が2007年12月に配布を開始した無料の開発ツール「Visual Studio 2008 Express Editions」をWindows XPにインストールすると,メイリオ・フォントがインストールされる(関連記事:MSのクリスマス・プレゼント? XPでも「メイリオ」が正式に利用可能に)。

 独立行政法人「情報処理機構」(IPA)が2007年10月1日に無料での配布を開始した「IPAフォント」も,JIS2004対応フォントだ(関連記事:IPAが日本語フォント「IPAフォント」を一般に配布)。また,日本語入力システムに関しても,「Microsoft Office 2007」の「MS IME 2007」や,「ATOK 16/17」といったポピュラーな製品が,JIS2004の追加文字を変換候補として出力している。JIS2004は,ユーザーに着実に浸透していると言っていいだろう。

なかなか進まない「企業のJIS2004対応」

 ところが,ユーザーからのデータを受け取る側である企業情報システムでは,JIS2004の対応が進んでいないのが実情だ。例えば,「Windows Vistaをご利用のお客様へ」といった注意書きを掲載するeコマース・サイトやインターネット・バンキング・サイトをよく目にする(写真1)。

写真1●Windows Vistaユーザーに対する注意書きの例
写真1●Windows Vistaユーザーに対する注意書きの例
(「佐川急便 e-collect ショッピングナビゲーション」より)
[画像のクリックで拡大表示]

 これらの注意書きの多くは,2000年に制定された「JIS X 0213」や,その改訂版であるJIS2004によって追加された文字を使わないようユーザーに呼びかけるものだ。バックエンドの業務システムがJIS X 0213やJIS2004に対応していない状況で,ユーザーにこれらの規格で追加された文字を使われても,うまく処理できない。そこでやむを得ず,このような注意書きを掲示しているのだ。

 ベンダーの中には,「業務システムへのJIS2004の“侵入防止”」をウリにするミドルウエアを販売するところもある。例えば,富士通が2007年11月にバージョンアップした文字資源管理ミドルウエア「Interstage Charset Manager」は,WebアプリケーションでJIS2004の追加文字を入力できなくするAjaxコンポーネントや,Webサーバーとバックエンドの基幹業務システムとの間でJIS2004の追加文字をブロックする機能,JIS2004の追加文字を既存の文字に置き換える機能などを搭載する(関連記事:富士通,Webアプリケーションの「JIS2004対応」を支援するミドルウエア)。

 ITproでは本記事の執筆にあたって,NEC,日本IBM,日立製作所,富士通といった主要システム・インテグレータに「企業情報システムにおける,JIS2004への移行状況を教えてほしい」という取材を試みたが,各社一様に「JIS2004への移行案件はほとんどない」と返答した。

最大の難関,「4バイト文字問題」とは?

 JIS2004に対応する企業が少ない理由の一つとして,企業が「JIS2004に対応するメリット」を感じていないことがあげられよう。しかしより大きな理由は,システム・インテグレータの多くが指摘するように,「JIS2004に対応しようと思っても,技術的に容易ではない」ことである。

 JIS2004に対応するうえでの最大の難関が,いわゆる「4バイト文字問題」だ。JIS X 0213とその改訂版であるJIS2004では,合計1090個の文字が追加されているが,このうちの303文字がUnicodeでは4バイトの文字として扱われる(表1)。これは,Windowsが内部で使用する「UTF-16」や,Webアプリケーションでよく使われる「UTF-8」でも同じである。

表1●JIS X 0213:2004の追加文字は,Unicodeでどう扱われるか?
  UTF-8 UTF-16 シフトJIS
半角数値・半角アルファベット 1バイト 2バイト 1バイト
ギリシア文字やロシア文字 2バイト 2バイト
カナや漢字 3バイト 2バイト 1バイト/2バイト
JIS X 0213の追加文字 4バイト 4バイト(サロゲート・ペア)

 「シフトJIS」が主流である企業情報システムでは,日本語の文字は2バイトとして扱うのが長い間,常識であった。またUTF-16でも,日本語を扱うぶんには「1文字=最大2バイト」で足りていた。そのため,ほとんどのアプリケーションやデータベースが「1文字=最大2バイト」を前提に作られている。一方,アプリケーションやデータベースをJIS2004に対応させるうえでは,「1文字=最大4バイト」を前提にプログラムを改修する必要がある。これが「4バイト文字問題」である。

 実は,「1文字=最大2バイト」を前提にしているのは,ユーザー・プログラムだけではない。マイクロソフトが提供する「.NET Framework」や「SQL Server 2005」のようなミドルウエアが備える文字列操作機能も,「1文字=最大2バイト」を前提にしているのだ。

 例えば,.NET Frameworkでは,文字列を扱うためのクラスである「Stringクラス(Stringオブジェクト)」が,「1文字=最大2バイト」を前提にしており,4バイト文字を2バイト文字2個として取り扱う。文字列全体を保存したり移動するぶんには大きな問題は発生しないが,文字列から1文字だけを切り出したり,抽出した文字列を比較したりする際に,4バイト文字が含まれていると問題が生じる可能性がある。

 つまり,ユーザー・プログラムを4バイト文字に対応させるためには,OSやミドルウエアの機能に頼るだけでは不十分であり,独自の配慮が必須になるのだ。これが「4バイト文字問題」への対応を一層難しくしている。

 次回からは,実際に「.NET Framework」が4バイト文字をどのように扱い,どのような問題が生じるのかを,検証を交えながら解説する。4バイト文字を扱うプログラムを作成するうえでの注意点が浮き彫りになるだろう。