Windows lpUsedDefaultChar何时为真?

Windows lpUsedDefaultChar何时为真?,windows,winapi,unicode,mfc,Windows,Winapi,Unicode,Mfc,我正在尝试理解WideCharToMultiByte,我想知道lpUsedDefaultChar何时设置为TRUE 下面是一个示例:lpszW应该是什么才能将标志设置为true lpszW = L”__WHAT SHOULD_BE_HERE__”; int c = ??; BOOL fUsedDefaultChar = false; DWORD dwSize = WideCharToMultiByte(CP_ACP, 0, lpszW, c, myOutStr ,myOutLen, NULL,

我正在尝试理解WideCharToMultiByte,我想知道lpUsedDefaultChar何时设置为TRUE

下面是一个示例:lpszW应该是什么才能将标志设置为true

lpszW = L”__WHAT SHOULD_BE_HERE__”;
int c = ??;
BOOL fUsedDefaultChar = false;
DWORD dwSize = WideCharToMultiByte(CP_ACP, 0, lpszW,  c, myOutStr ,myOutLen, NULL, &fUsedDefaultChar); 

任何了解Unicode/UTF内容的书籍/教程都会很棒


谢谢

当前代码页中不存在的任何内容都将映射到?(默认情况下)和UsedDefaultChar将为!=错

可能是unicode中最常见的代码页和大多数字符

例如,它可能不存在于当前代码页中,因此不会映射到有效的窄字符:

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
lpUsedDefaultChar
设置为TRUE时,非常清楚:

lpDefaultChar[in]可选。指针 要使用的字符(如果是字符) 无法在指定的 代码页。应用程序将设置此 如果函数为空,则将参数设置为NULL 使用系统默认值。到 获取系统默认字符, 应用程序可以调用GetCPInfo 或getcpinfo函数

lpUsedDefaultChar[out]可选。 指向一个标志的指针,该标志指示 该函数使用了默认值 转换中的字符。旗帜 如果一个或多个 无法删除源字符串中的字符 以指定的代码表示 页否则,该标志将设置为 错。此参数可以设置为 空


在我看来,这并没有留下太多误解的余地。

谢谢安德斯,我应该把这个问题写得更好。如果我传入一个字符串L“abc\x0100”,我仍然得到fUsedDefaultChar==true。确切的范围是多少?@tvr:没有确切的范围,因为它取决于您转换到的代码页,但任何东西都可以