Windows Vistaがロールアウトしてから、もうすぐ半年。
なかなか企業での導入が進みません。

理由としては

  • マルチメディア機能など、企業にとってはどうでも良い
  • アプリケーションのサポート状況が固まっていない
  • セキュリティが不安
  • 文字コードの問題

などなどがあげられます。

本格的に導入が始まるのは、SP1が出たあと(おそらく来年初頭)になるでしょう。
が、我々エンジニアはそうも言っていられません。
ちらほらVista対応なんて言葉が出てくるはずです。

特に意識すべきは文字コードの問題です。
これが結構な大問題。

1.XPとVistaでは文字の見え方が違う
2.一部の文字がサロゲートペア

という状態です。
1はいいんですけど、2が大問題です。

まずは1から簡単に説明します。
したのPDFはMicrosoftから出ているグリフの違いに関するドキュメントです。

右がXPで表示したとき、左がVistaです。

これはXPではJIS X 0208、VistaではJIS X 0213という文字コードが使われているからなんですけど、
正しいのはVistaの方です。

JIS X 0213:2004に関する資料は、Microsoftのこのページからダウンロードできます。

JIS X 0208が間違えているんですね。ソレを0213で修正したわけなんですけど、
今企業にあるのはほとんどがXPなわけだし、環境によって見え方が違うのはちょっと気持ち悪いですね。

これはモジコードの問題なので、XP用の0213の文字セットもあるし、
Vista用の0208の文字セットもあるので、このことが説明できれば良いでしょう。

Windows XP および Windows Server 2003 向け JIS2004 対応 MS ゴシック &MS 明朝フォントパッケージ
Windows Vista 向け JIS90 互換 MS ゴシック & MS 明朝フォントパッケージ


問題は2です。サロゲートペア。
あ〜もう!って感じです。

何が困るかという話の前にUnicodeについてお話させてください。

1980年代、コンピュータ上で多言語をシームレスに扱えるようにしようという動きがありました。
提唱はゼロックスで、協力した企業として、マイクロソフト、アップル、IBM、サン・マイクロシステムズ、ヒューレット・パッカード、ジャストシステムなどが参加したユニコードコンソーシアムによって策定されました。
今は、ISO/IEC 10646として国際標準になっています(厳密にはUCSのことを定義している)。

で、このUnicode。
16ビットを使って一文字を表現しています。

16ビットで表現できるデータは65,536ですね。
問題は、65536文字で全ての言語の文字を表現できるか?って事です。

むろん出来るわけない。全然足りなくて、空いた2万文字の争奪戦が勃発したぐらいです。

このUnicodeをUnicode1.0といいます。

ではどうするか?というと、
さらに16ビット追加して、32ビットで一文字を表現する領域を作ったわけです。
無論今までの16ビットで表現できる文字はそのままです。

と言う事は、Unicode2.0には、16ビットで一文字をあらわすものと、32ビットで一文字をあらわすものが混在する、可変長な文字セットになっています。
この32ビットであらわす方法をサロゲートペアって言います。

可変長な文字扱うのって大変なんですよぉ・・ヽ(´Д`;)ノアゥア...

そんなの関係あるの?と思った方。
それが大アリなのですよ!

例えばC#でcharに文字を代入するばあい、

char hoge = '[非サロゲートペア文字]'

はOKですが、

char hoge = '[サロゲートペア文字]'

はコンパイルエラーになります。

なぜか?というと・・・charが16ビットまでだからですねぇ。

じゃあ、どうするのか?

String piyo = "[サロゲートペア文字]"

こうするしかないのです。

もーね、コレが同いう事を意味するかプログラマならわかると思うのですが、piyo.lengthとか当てにならないわけですよ。
ほんと、「あ〜ぁ」って感じ(*´д`)

我らが愛する正規表現も影響を受けます。
バイト単位で見るため非サロゲートペア2文字 = サロゲートペア一文字でマッチしてしまう可能性は、大いにあります。回避策はちゃんとあるんですけどね。

プログラミングだけじゃないです。

インフラストラクチャレベルも影響を受けます例えば、RDB。
データ格納するだけならいいんですが、検索やキーに指定した場合は同様に問題が起こります。

アプリの実装に関しては、JIS X 0213:2004 / Unicode 実装ガイドが役に立ちそうです。

Powered by ScribeFire.

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: そろそろ知っておくべき、Vistaの文字コード問題

このブログ記事に対するトラックバックURL: http://hackmylife.net/mt/mt-tb.cgi/434

コメントする

このブログ記事について

このページは、hackmylifeが2007年6月10日 22:29に書いたブログ記事です。

ひとつ前のブログ記事は「firefoxからblogエントリを投稿する」です。

次のブログ記事は「文字コードに関する事」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.0

アドセンス

MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore
MoMAstore
MoMAstore
MoMAstore