« Windowsのコードページ | トップページ | フォントの列挙 »

2007年6月14日 (木)

コードページの続き

引き続きコードページのお話。

前回作成したプログラムを動かしてたら、IsValidCodePageでtrueが返ってきてるのに、GetCPInfoExで、情報が取得できてないコードページがあるのに気づいた。次のように。

Cp2_1_7   

うーむ。小一時間色々調べたがよくわからない。で、GetCPInfoExの戻り値をチェックしてなかったので、エラーが発生したらGetLastErrorで拡張エラー情報を表示するように、プログラムを変えてみた。

Cp2_2_2

MSDNの説明のとおり、GetLastErrorでERROR_INVALID_PARAMETER(87)が返ってる。で、あることに気づいた。MSDNの説明でコードページに関して「インストール済み(installed)」または「利用可能な(available)」と表現を使い分けている。で、もう一度、GetCPInfoExの説明を詳しく見ると、

コードページは、システムにインストールされている場合にのみ、有効と判断されます。」

英語版では

A code page is considered valid only if it is installed on the operating system

とある。IsValidCodePageはコードページがシステムにインストールされているか判断するのであって、インストールされていても利用可能であるとは限らないのだ。まぁ、詳しくはわからないが、コーディングする時は要注意だ。

で、今まではWindows2000上で作成したプログラムを動かしていたが、XP上で動かしてみた。

Cp2_3_1

XP上では(デフォルトで?)利用可能なコードページが増えている。コードページ54936のGB18030は中国の文字コードであるらしいが、MaxCharSizeが4でLeadByteが空である。GB18030はどんな文字コードか調べようとグーグルで検索すると、中国政府がメーカーに強制的に採用を義務づけたとかおもしろい話も見つかる(参考1参考2)。まぁ、そんな話は置いといて、国際化アプリケーションを作成する場合、コードページをごりごり切り替えるより素直に内部の文字コードをUnicodeにした方が楽なような気がする。

で、最後に作ったアプリを簡単そうなのでここからダウンロードできるようにしようかなと思ってもみたり。気がむいたらだけど。

« Windowsのコードページ | トップページ | フォントの列挙 »

Windows」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1497665/39651869

この記事へのトラックバック一覧です: コードページの続き:

« Windowsのコードページ | トップページ | フォントの列挙 »

自作ソフトウェア

無料ブログはココログ

メモ