2

Windows は、「現在のロケール」の少なくとも 4 つの次元を追跡しているようです: http://www.siao2.com/2005/02/01/364707.aspx

  • デフォルトのユーザー ロケール
  • デフォルトのシステム ロケール
  • デフォルトのユーザー インターフェイス言語
  • デフォルトの入力ロケール

4 つの別々のロケールが何に役立つのかを追跡しようとするだけで頭が痛くなります...

ただし、コード ページとロケール (またはLCID、または言語 ID)の関係は理解していません。 932)。

Unicode とナロー文字列間の変換時に、ユーザーが希望する言語を既定の MBCS ターゲットとして使用するようにアプリケーションを構成するにはどうすればよいですか?

つまり、以前は MBCS アプリケーションでした。その後、Unicode に切り替えました。英語では問題なく動作しますが、アジア言語では失敗します。これは、Windows の変換機能が明示的なコード ページ (ロケール ID または言語 ID ではない) を使用するためであり、(デフォルトでは ANSI コード ページ) に設定できますWideCharToMultiByteが、そうではありません。 「ユーザーのデフォルトのインターフェース言語のコードページにデフォルト設定」の値があるようです。MultiByteToWideCharCP_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 が指定またはインストールされていない場合、システムのデフォルトに自動的に戻ります)。

4

4 に答える 4

2

Jon Traauntvein のコメントに同意します。このGetACP機能は、コントロール パネルのユーザーの言語設定を反映します。また、あなたが提供した「すべてを整理する」ブログへのリンクに基づいて、DEFAULT USER INTERFACE LANGUAGE は Windows ユーザー インターフェイスが使用する言語であり、プログラムで使用される言語とは異なります。

ただし、どうしても DEFAULT USER INTERFACE LANGUAGE を使用したい場合は、呼び出して取得GetUserDefaultUILanguageし、次の表を使用して言語 ID をコード ページにマップできます。 言語識別子とロケール

GetLocaleInfo関数を使用してマッピングを行うこともできますが、最初に、取得した言語 ID をGetUserDefaultUILanguageロケール ID に変換する必要があります。数値の代わりにコード ページの名前を取得すると思いますが、それを試して見ることができます。

于 2013-08-20T03:46:06.113 に答える
0

CW2A() または CA2W() を使用すると、現在のシステム ロケール (または非 Unicode アプリケーションで使用される言語) を使用して変換が行われます。

于 2015-08-27T23:19:10.403 に答える