« そうえいばDBXInspector | トップページ | コードページの続き »

2007年6月13日 (水)

Windowsのコードページ

色々話題がぶっとんだりしてるが、まぁ、気にしないでおこう。

で、今回はWindowsのコードページ。現在一般的に使われてるWindowsの内部の文字コードはUnicode(UTF-16LE)になっているが、Unicode以前のさまざまな国・地域専用の文字コードとUnicode間の変換テーブルをコードページと呼び、コードページ識別子(Code Page Identifier)を割り振り管理している。日本語の文字コードに関して言えば、例えば、シフトJISには932というコードページ識別子が与えられている。で、今回は、そのコードページ関連のWinAPIであるIsValidCodePageとGetCPInfoEx(GetCPInfo)を色々試してみた。Windowsでは既に150以上(詳細はここ)ものコードページ識別子が定義されているが、それぞれのコードページに対して、上記のAPIがどのような結果を返すプログラムを作成してみた。実行結果は下図の通り。

Cp1_3

ちなみに、先ほど述べたシフトJISの2バイトで表される2バイト文字の先行バイト(リードバイト)の範囲は、0x80-0x9F、0xE0-0xFCであるが、確かに、上の図でも、(0x80-0x9F)(0xE0-0xFC)となっており結果はよさそうである。また、先行バイトはWin32APIのIsDBCSLeadByteを使っても調べられるが、こちらは、コードページを指定できない。CPINFOEX構造体のMaxCharSizeには、そのコードページ内の文字の最大バイト長が返されるが、シフトJISはDBCSなので、2が返されるのが上図からも分かる。DefaultCharとUnicodeDefaultCharはWideCharToMultiByteとMultiByteToWideCharでMBCS<->Unicode間の変換を行ったときに、変換できない文字に対して割り当てるデフォルト文字を明示的に指定しないときに使用される文字である。

とまぁ、詳細はMSDNを読んだほうが速いのでここまで。

追記:コードページを指定できるIsDBCSLeadByteExがありましたね

« そうえいばDBXInspector | トップページ | コードページの続き »

Windows」カテゴリの記事

コメント

コメントを書く

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

トラックバック

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

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

« そうえいばDBXInspector | トップページ | コードページの続き »

自作ソフトウェア

無料ブログはココログ

メモ