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; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。