2007.04.28

Windows Vista JIS2004問題

Windows Vistaが1月30日に発売されてから3ヶ月が経ちました。
最新技術に興味のある方たちの購入が収束し、4月以降売れ行きが伸び悩んでいますが、
これからパソコンを買う人たちは必然的にVistaを購入することになりますので、
何年後かには現在のXPと同じシェアを持つことになるでしょう。
(DELLはユーザーからの要求が高いためXP搭載版を再開しましたが)

XPとVistaを比べる場合、まず目に付くのはAeroと呼ばれる新しいGUIでしょう。
各所が半透明になり、3Dで表示されています。
セキュリティも高くなり、ソフトウェアを起動する際に管理者レベルで動かすソフトは、
毎回質問されるようになっています。
また.NET Framework3.0が標準搭載となり、今までより高度なWebサービスを利用する
ことが出来ます。

そんな見た目にはわかる変化の裏にソフトウェア開発者にとって、
非常に面倒な問題をVistaは抱えています。
それが「JIS2004問題です。」

JIS2004問題とは、これまでのWindowsはJIS90と呼ばれる1990年に策定された
JIS規格を基に、漢字のフォントを利用してきました。
しかしこの規格では一部の文字の字形が略字で登録されている、
人名に使われる漢字でも登録されていないものがある、という問題がありました。
このためVistaでは新しい文字セットのJIS規格「JIS X 0213;2004」に準拠した
日本語フォントに変更されました。
これにより、既存漢字のうち122文字の字形の変化と約900文字の漢字、約200文字
の非漢字が新たに表示可能となります。
これだけ聞いただけでは、「新しい文字が使えるようになったから良い事じゃない、
何が問題なの?」と思うでしょう。

まず1つ目の問題として
字形の変化した漢字と新しい漢字を使いVistaで作った文書やメールを
XPで開いた場合、違う字形となってしまったり、「・」や「□」で表示されてしまいます。
実際には、お客様に提出する書類で名前に使用する漢字の字形が違うといった
問題が考えられます。

2つ目の問題として、JIS2004で追加された漢字の一部が2バイト文字ではなく、
サロゲートペアという4バイト文字で表現されているという問題です。
Webサービスを構築する際にフォームに入力された文字数をカウントし、
文字数制限を加えることがありますが、この4バイト文字を入力された場合、
見た目は1文字にもかかわらず2文字とカウントされてしまいます。
10文字入力可能なフォームにサロゲートペアの字だけで入力すると、
5文字しか入力できないことになります。

またこの4バイトの漢字はUnicodeにのみ追加されています。
ShiftJISやEUCで作成されているホームページのフォームで使用された場合、
数値文字参照と呼ばれる「&#文字コード番号;」の状態に変換されてしまいます。

では、どのようにこの問題を解消すればよいのでしょうか。
まずMicrosoftが提案する解決方法が3つあります。

1.WindowsVista側をJIS90相当にするフォントをインストールする。
http://www.microsoft.com/japan/windows/products/windowsvista/jp_font/jis90/default.mspx

2.WindowsXPにJIS2004相当のフォントをインストールする。
http://www.microsoft.com/japan/windows/products/windowsvista/jp_font/jis04/default.mspx

3.VistaのIMEの設定でJIS2004で追加された文字を入力出来ない設定にする。
しかしどの方法も欠点があります。

1と3の場合、すでにJIS2004の文字が使用されている文章などから
コピー&ペーストをすると、JIS2004追加文字をフォームに入力することが出来ます。
2の場合、字形の変化や2バイト文字の追加文字は表示できますが、
サロゲートペアの文字は正しく表示できない可能性があります。

ローカル環境の文書の場合はユーザーが漢字を入力する際に、
IME入力時に変換候補の横に「環境依存文字 (unicode)"」と表示があるものは
使わない、というように注意するしかありません。
Webサービス場合は文字化けを許容し入力を可能にするか、
JIS2004で追加された文字は入力させないという2択となります。

入力チェックの方法として、いくつか方法があります。
入力された文字を文字コード間で変換を行い、同じ文字に変換されるか
チェックする方法や、入力された文字を2バイトごとにチェックし、
サロゲートペアの上位に使用される、「D800~DFFF」(サロゲート領域)にある
ビット列があればその次の2バイトとあわせて、サロゲートペアの文字として処理を行う。
という方法です。

今後表面化してくるであろうこの問題に早期に対応を行い、
お客様からの苦情をうけてから対応することにならないようにしましょう。

トラックバック

このエントリーのトラックバックURL:
http://www.ilovex.co.jp/scripts/intra/mt/mt-tb.cgi/1573

photo
ilovexbiz