次の方法で共有


ロケールとコード ページ

ロケール ID は、特定の地域の規則や言語を反映します。一つの言語が複数の国や地域で使用されることもあります。; たとえば、ポルトガル語はブラジルで、ポルトガルだけでなくいます。逆に、国/地域に複数の公用語がある場合があります。たとえば、カナダでは、公用語として英語とフランス語の 2 つの言語が使用されています。そこでカナダには、カナダ英語とカナダ フランス語の 2 つの異なったロケールが存在します。ロケールに依存するカテゴリとしては、日付の形式や通貨値の表示形式などがあります。

言語、国や地域にローカルな規則を決定しますが、テキストとデータ形式規則を決定します。言語にはそれぞれ、コード ページで表される固有のマッピングが設定され、区切り記号や数字などのアルファベット以外の文字も含まれています。コード ページとは文字セットのことであり、その地域の言語と密接な関係にあります。このように、ロケール は、言語、国または地域とコード ページの組み合わせです。ロケールとコード ページの設定は、setlocale 関数を呼び出して、実行時に変更できます。

言語が異なると、コード ページも異なる場合があります。たとえば、ANSI のコード ページ 1252 は英語やほとんどのヨーロッパ言語で使われていますが、日本語の漢字では ANSI のコード ページ 932 が使われています。事実上すべてのコード ページは、下位 128 文字 (0x00 ~ 0x7F) の ASCII 文字セットを共有しています。

1 バイトのコード ページはいずれも、バイト値を文字 (数字や区切り記号を含む) やグリフに対応付けた、256 エントリのテーブルで表すことができます。マルチバイトのコード ページも、2 バイト値を文字に対応付けた (64K エントリにもなる) 大きなテーブルとして表すことができます。ただし実際は、これらのコード ページは、最初の 256 (1 バイト) 文字を対応付けたテーブルと 2 バイト値の範囲として表すのが一般的です。

コード ページの詳細については、「コード ページ」を参照してください。

C のランタイム ライブラリには、ロケールとマルチバイトの 2 種類の内部コード ページが存在します。現在のコード ページは、プログラムの実行中に変えることができます (setlocale 関数と _setmbcp 関数の説明を参照)。また、ランタイム ライブラリは、オペレーティング システムのコード ページの値を取得して使用することもできます。Windows 2000 では、オペレーティング システムのコード ページが "システム既定 ANSI" のコード ページになっています。このコード ページは、プログラムの実行中に変更されることはありません。

ロケールのコード ページを変更すると、ロケールに依存する関数の動作は、そのコード ページで規定されている動作に変更されます。ロケールに依存する関数はすべて、既定で、まず "C" ロケール固有のコード ページを基に動作します。システム内部のロケールのコード ページもロケールに特有なその他の属性も、setlocale 関数を呼び出すことで変更できます。setlocale (LC_ALL, "") を呼び出すと、オペレーティング システムのユーザー ロケールが示すロケールに設定されます。

同様に、マルチバイトのコード ページを変更すると、マルチバイト関数の動作は、そのコード ページで規定されている動作に変更されます。既定では、マルチバイト関数はすべて、オペレーティング システム既定のコード ページに対応しているマルチバイト コード ページを使って動作します。システム内部のマルチバイトのコード ページは、_setmbcp 関数を呼び出すことによって変更できます。

C のランタイム関数 setlocale は、現在のプログラムのロケール情報の一部または全部の設定、変更、および問い合わせが可能です。_wsetlocale ルーチンは、setlocale のワイド文字バージョンです。したがって、_wsetlocale の引数と戻り値はワイド文字列になります。

参照

概念

Unicode と MBCS

文字セットにおける移植性の利点