2011-01-18 6 views
2

WideCharToMultiByteを理解しようとしていて、lpUsedDefaultCharがTRUEに設定されているのが不思議でした。WideCharToMultiByte lpUsedDefaultCharはいつ真ですか?

サンプルは次のとおりです。フラグをtrueに設定するにはどうすればいいですか?

​​

http://msdn.microsoft.com/en-us/library/dd374130(VS.85).aspx

理解のUnicode/UTFもののための任意の本/チュートリアルは素晴らしいことです。

ありがとうございます!

答えて

5

現在のコードページには存在しないものはどれですか? (デフォルトで)、UsedDefaultCharは!= FALSEになります。

Windows-1252はおそらく最も一般的なコードページであり、これらの文字のほとんどはユニコードでmap to the same valueです。

例えば、それはおそらく、あなたの現在のコードページがあるため、有効な狭い文字にマッピングしないであろうものは何でもに存在しないΩ (ohm)してください:

BOOL fUsedDefaultChar=FALSE; 
DWORD dwSize; 
char myOutStr[MAX_PATH]; 
WCHAR lpszW[10]=L"Hello"; 
*lpszW=0x2126; //ohm sign, you could also use the \u2126 syntax if your compiler supports it. 
dwSize = WideCharToMultiByte(CP_ACP, 0, lpszW, -1, myOutStr ,MAX_PATH, NULL, &fUsedDefaultChar); 
printf("%d %s\n",fUsedDefaultChar,myOutStr); //This prints "1 ?ello" on my system 
+0

アンダーズさん、ありがとうございました。私が文字列L "abc \ x0100"を渡すと、私はまだfUsedDefaultChar == trueを取得します。正確な範囲は何ですか? – tvr

+0

@tvr:変換先のコードページに依存するので正確な範囲はありませんが、<= 127の値は安全です。 – Anders

1

MSDN documentationlpUsedDefaultCharがTRUEに設定されている場合について非常に明確です:

lpDefaultChar [in]任意です。文字 を指定された コードページで表現できない場合は、使用する文字に というポインタを指定します。システムがデフォルト値を使用するために関数が である場合、アプリケーションはこの パラメータをNULLに設定します。 にシステムのデフォルト文字を取得するには、 アプリケーションはGetCPInfo またはGetCPInfoEx関数を呼び出すことができます。

lpUsedDefaultChar [out]オプション。 関数がデフォルトの 文字を変換に使用したかどうかを示すフラグへのポインタです。 フラグは、ソース文字列の 文字のうち1つ以上が で指定されたコード ページに表示されない場合、TRUEに設定されます。それ以外の場合、フラグは FALSEに設定されます。このパラメーターは、 NULLに設定できます。

私の意見では、誤解の余地はあまりありません。

関連する問題