WideCharToMultiByte什么时候lpUsedDefaultChar是真的?

时间:2011-01-18 02:41:44

标签: windows winapi unicode mfc

我正在尝试理解WideCharToMultiByte,我想知道什么时候lpUsedDefaultChar会被设置为TRUE。

以下是一个示例:如果要将标志设置为true,那么lpszW应该是什么?

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

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

任何用于理解Unicode / UTF内容的书籍/教程都会很棒。

谢谢!

2 个答案:

答案 0 :(得分:5)

当前代码页中没有的任何内容都会映射到? (默认情况下)和UsedDefaultChar将是!= FALSE。

Windows-1252可能是unicode中最常见的代码页和大多数字符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

答案 1 :(得分:1)

MSDN documentation非常清楚lpUsedDefaultChar何时设为TRUE:

  

lpDefaultChar [in]可选。指针   如果一个角色使用的角色   无法在指定中表示   代码页。该应用程序设置此   如果函数是,则参数为NULL   使用系统默认值。至   获取系统默认字符,   应用程序可以调用GetCPInfo   或GetCPInfoEx功能。

     

lpUsedDefaultChar [out]可选。   指向标志的指针,指示是否   该函数使用了默认值   转换中的字符。国旗   如果一个或多个,则设置为TRUE   源字符串中的字符不能   用指定的代码表示   页。否则,标志设置为   假。此参数可以设置为   NULL。

在我看来,这并没有留下很多误解的空间。