ANSI和Unicode互转

VC++ ANSI和Unicode互转,以及MultiByteToWideChar和WideCharToMultiByte用法!

将ANSI转换到Unicode   
  (1)通过L这个宏来实现,例如:   CLSIDFromProgID(   L"MAPI.Folder",&clsid);   
  (2)通过MultiByteToWideChar函数实现转换,例如:   
  char   *szProgID   =   "MAPI.Folder";   
  WCHAR   szWideProgID[128];   
  CLSID   clsid;   
  long   lLen   =   MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID));   
  szWideProgID[lLen]   =   '/0';     
  (3)通过A2W宏来实现,例如:     
  USES_CONVERSION;     
  CLSIDFromProgID(   A2W(szProgID),&clsid);     
    
  将Unicode转换到ANSI   
  (1)使用WideCharToMultiByte,例如:   
  //   假设已经有了一个Unicode   串   wszSomeString...     
  char   szANSIString   [MAX_PATH];     
  WideCharToMultiByte   (   CP_ACP,   WC_COMPOSITECHECK,   wszSomeString,   -1,   szANSIString,   sizeof(szANSIString),   NULL,   NULL   );     
  (2)使用W2A宏来实现,例如:   
  USES_CONVERSION;   
  pTemp=W2A(wszSomeString);

以上为网上找到的方法,经过实践证明, MultiByteToWideChar函数的使用比较个性正确的用法应该如下:
             int iLen = WideCharToMultiByte(CP_ACP, 0, wFileName, -1, NULL, 0, NULL, NULL);
             WideCharToMultiByte(CP_ACP, 0, wFileName, -1, cFileName, iLen, NULL, NULL);
             uchNameLength = iLen;
wFileName为宽字符数组,包含实际的字符。
cFileName 存放转换后的字符。

由上可以看出,需要先获取 wFileName 数组中实际存放的字符数。然后进行转换,并将转换后的字符长度存储于 uchNameLength变量中。

你可能感兴趣的:(ANSI和Unicode互转)