牛骨文教育服务平台(让学习变的简单)
博文笔记

win32控制台输出带中文Unicode字符串

创建时间:2016-08-20 投稿人: 浏览次数:1307

方法一:

   将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;
}



   

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。