C语言
ANSI转转宽字符-mbstowcs
char test[64];
sprintf(test, "hello char! \n");
printf("%s", test);
wchar_t testT[64];
int nRet = mbstowcs(testT, test, sizeof(testT));
wprintf(L"%s",testT);
宽字符转ANSI-wcstombs
wchar_t testO[64];
swprintf(testO, L"hello wchar ! \n");
wprintf(L"%s",testO);
char testF[64];
wcstombs(testF, testO, sizeof(testF));
printf("%s \n", testF);
Windows平台
ANSI转转宽字符:MultiByteToWideChar(UINTCodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cchMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar)
CodePage:指定执行转换的多字节字符所使用的字符集,可以使用CP_ACP。
dwFlags:一组位标记用以指出是否未转换成预作或宽字符(若组合形式存在),是否使用象形文字替代控制字符,以及如何处理无效字符。一般取值为0时。
lpMultiByteStr:指向待转换的字符串的缓冲区。
cchMultiByte:指定由参数lpMultiByteStr指向的字符串中字节的个数。可以设置为-1,会自动判断lpMultiByteStr指定的字符串的长度
lpWideCharStr:指向接收被转换字符串的缓冲区。
cchWideChar:指定由参数lpWideCharStr指向的缓冲区的宽字节数。若此值为0,函数不会执行转换,而是返回目标缓存lpWideChatStr所需的宽字符数。
宽字符转ANSI:WideCharToMultiByte(UINT CodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cchMultiByte,
LPCSTR lpDefaultChar,
LPBOOL pfUsedDefaultChar)
lpDefaultChar和pfUsedDefaultChar:只有当WideCharToMultiByte函数遇到一个宽字节字符,而该字符在uCodePage参数标识的代码页中并没有它的表示法时,WideCharToMultiByte函数才使用这两个参数。(通常都取值为NULL)
如果宽字节字符不能被转换,该函数便使用lpDefaultChar参数指向的字符。如果该参数是NULL(这是大多数情况下的参数值),那么该函数使用系统的默认字符。该默认字符通常是个问号。这对于文件名来说是危险的,因为问号是个通配符。
pfUsedDefaultChar参数指向一个布尔变量,如果Unicode字符串中至少有一个字符不能转换成等价多字节字符,那么函数就将该变量置为TRUE。如果所有字符均被成功地转换,那么该函数就将该变量置为FALSE。当函数返回以便检查宽字节字符串是否被成功地转换后,可以测试该变量。
使用:
ANSI转宽字符
chartest[64];
sprintf(test,"hello char ! \n");
printf("%s",test);
wchar_ttestT[64];
intnRet = MultiByteToWideChar(CP_ACP,0,test, -1, testT,sizeof(testT));
wprintf(L"%s",testT);
宽字符转ANSI
wchar_t testO[64];
swprintf(testO,L"hello wchar !\n");
wprintf(L"%s",testO);
char testF[64];
WideCharToMultiByte(CP_OEMCP,0,testO, -1, testF,sizeof(testF),NULL,false);
printf("%s\n",testF);