win32控制台输出带中文Unicode字符串
方法一:
将Unicode字符集转化为ANSI字符集:
// char rtn[200];
VOID wcs2mbs(LPCOLESTR wcstr, char* chResult)
{
size_t wLen = wcslen(wcstr) + 1; // 宽字符字符长度,+1表示包含字符串结束符
int aLen = WideCharToMultiByte(CP_ACP, 0, wcstr, wLen, NULL, 0, NULL, NULL);
LPSTR lpa = new char[aLen];
WideCharToMultiByte(CP_ACP, 0, wcstr, wLen, lpa, aLen, NULL, NULL);
strcpy_s(chResult, 200, lpa);
delete[] lpa;
lpa = NULL;
}方法二:
wcout本地化后输出:
locale loc("chs");
wcout.imbue(loc);
wcout<<endl<<"After locale ,wcout out:"<<testChar<<endl;
测试用例与结果:
#include <iostream>
#include <Windows.h>
using namespace std;
#define BUFF_MAX_LEN 200
// char rtn[200];
VOID wcs2mbs(LPCOLESTR wcstr, char* chResult)
{
size_t wLen = wcslen(wcstr) + 1; // 宽字符字符长度,+1表示包含字符串结束符
int aLen = WideCharToMultiByte(CP_ACP, 0, wcstr, wLen, NULL, 0, NULL, NULL);
LPSTR lpa = new char[aLen];
WideCharToMultiByte(CP_ACP, 0, wcstr, wLen, lpa, aLen, NULL, NULL);
strcpy_s(chResult, 200, lpa);
delete[] lpa;
lpa = NULL;
}
int main(int argc,char ** argv)
{
TCHAR testChar[BUFF_MAX_LEN] ;
memset(testChar,0,sizeof(TCHAR)*BUFF_MAX_LEN);
wsprintf(testChar,L"分享使快乐传递!");
cout<<"cout output :"<<testChar<<endl; //只能输出地址
// wcout<<"wcout output :"<<testChar<<endl; //输出空(连后面的endl都没有,程序异常结束)
/* 方法一:本地化 */
locale loc("chs");
wcout.imbue(loc);
wcout<<endl<<"After locale ,wcout out:"<<testChar<<endl;
/* 方法二:转化为ANSI字符集*/
char szcConv[BUFF_MAX_LEN];
memset(szcConv,0,BUFF_MAX_LEN * sizeof(char));
wcs2mbs(testChar,szcConv);
cout<<"After conversion : "<<szcConv<<endl;
return 0;
}
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
