Windows は、「現在のロケール」の少なくとも 4 つの次元を追跡しているようです: http://www.siao2.com/2005/02/01/364707.aspx
- デフォルトのユーザー ロケール
- デフォルトのシステム ロケール
- デフォルトのユーザー インターフェイス言語
- デフォルトの入力ロケール
4 つの別々のロケールが何に役立つのかを追跡しようとするだけで頭が痛くなります...
ただし、コード ページとロケール (またはLCID
、または言語 ID)の関係は理解していません。 932)。
Unicode とナロー文字列間の変換時に、ユーザーが希望する言語を既定の MBCS ターゲットとして使用するようにアプリケーションを構成するにはどうすればよいですか?
つまり、以前は MBCS アプリケーションでした。その後、Unicode に切り替えました。英語では問題なく動作しますが、アジア言語では失敗します。これは、Windows の変換機能が明示的なコード ページ (ロケール ID または言語 ID ではない) を使用するためであり、(デフォルトでは ANSI コード ページ) に設定できますWideCharToMultiByte
が、そうではありません。 「ユーザーのデフォルトのインターフェース言語のコードページにデフォルト設定」の値があるようです。MultiByteToWideChar
CP_ACP
つまり、これは非常に複雑ないじりです。「現在の言語」の 4 つの個別の次元、3 つの異なる識別子タイプ、および C ライブラリと C++ 標準ライブラリの (異なる) 文字列識別子。
以前の MBCS ビルドでは、ディスク I/O とユーザー I/O は正しく機能していました。すべてが DEFAULT SYSTEM LOCALE (Windows XP 用語: 「非 Unicode プログラムの言語」) のままでした。しかし現在、私たちの UNICODE ビルドでは、すべてが "C" をロケールとして使用しようとし、ファイル I/O は UNICODE をユーザーのロケールに、またはその逆に適切にトランスコードできません。
現在のユーザーの言語のコード ページを使用して (ナローの場合) テキスト ファイルを書き出す必要があります。また、読み込まれると、現在のユーザーの言語のコード ページが UNICODE に変換されます。
ヘルプ!!!
明確化: 理想的には、OS の既定のコード ページではなく、MUI 言語のコード ページを使用したいと考えています。GetACP() はシステムのデフォルト コード ページを返しますが、ユーザーが選択した MUI 言語を返す関数を知りません (MUI が指定またはインストールされていない場合、システムのデフォルトに自動的に戻ります)。