走进windows编程的世界-----字符编码

时间:2014-06-20 10:06:33   收藏:0   阅读:314

1   字符编码

1.1编码的历史

1.1.1ASCII码

0=127 7位表示

1.1.2ASCII扩展码

0—255 8为表示。

代码页:通过代码也来切换对应的字符(数字表示)

1.1.3双字节字符集DBCS

使用一个或两个字节表示字符。

bubuko.com,布布扣

1.1.4Unicode编码

全部使用2个字节表示字符

bubuko.com,布布扣

内存 硬盘等资源占用变大。对编码支持度大。

字符集

1.2C 语言和编码

1.2.1单字节的字符和字符串

Char  cText = ‘A’;

Char * pszText =“ABCD”

void ASCII()
{
	char ctext = 0;

	for( int nindex = 0; nindex < 256; nindex ++){
		printf(" %c ",ctext);
		ctext ++ ;
	}
	puts("");
}
void c_char()
{
	char *psztext = "Hello Worlf\n";
	int nlen = strlen(psztext);

	printf("nlen = %d,pszchar = %s",nlen,psztext);
}
void CoadPage(int nCodePage)
{
	SetConsoleOutputCP(nCodePage);
	char ctext = 0;

	for( int nindex = 0; nindex < 256; nindex ++){
		printf(" %c ",ctext);
		ctext ++ ;
	}
	puts("");
}



1.2.2宽字节的字符

Wchar_t cText = ‘A’;

Wchar_t *pszText= L”ABCD”

void C_wchar()
{
	wchar_t cText = ‘A‘;
	wchar_t *pszText = L"ABCD"; /*双字节Uncode字符*/

	int nlen = wcslen(pszText);

	/*只能打印出A来,无法打印全*/
	printf("%s\n",pszText);
	/*可打印完成的字符串*/
	wprintf(L"%s,len = %d\n",pszText,nlen);


	/*多字节字符*/
	char * pszChs = "我是程序员";
	nlen = strlen(pszChs);
	printf("%s,len=%d",pszChs,nlen);
}


1.2.3定义通用字符函数

  为了程序中可以方便的支持宽字节和多字节字符,使用TCHAR 来定义,基本实现思路如下。

        

#ifndef _UNICODE

   typedef char TCHAR

#define _T(x)   x

#else

    typedefwchar_t TCHAR

#define _t(x) L##x  //## ¢?¨®¤?

#endif

 

void tchat()
{
	TCHAR * pszText = __T("我是程序员");

#ifndef _UNICODE
	int nLen = strlen(pszText);
#else
	int nLen = wcslen(pszText);
#endif

}

1.1.1Unicode的控制台打印

将Unicode 字符串输出到控制台上。参考资料:http://blog.sina.com.cn/s/blog_4e3197f20100a7v3.html

同样,Windows控制台也是标准的UNICODE系统功能,也有xxxAxxxW两种对其操作的Win32 API,下面以WriteConsole为例。它也存在WriteConsoleAWriteConsoleW两上版本,但我们在MSDN中找不到这两个原型型,可以在C:\ProgramFiles\Microsoft Visual Studio\VC98\Include\WINCON.H在可以发现它的定义,并可以发现对它们进行控制的预定义语句。

#ifdefUNICODE

#defineWriteConsole WriteConsoleW

#else

#defineWriteConsole WriteConsoleA

#endif

void PrintUnicode()
{
	/*根据需要获取的句柄类型设置参数为
	 *	STD_INPUT_HANDLE(标准输入句柄)
	 *	STD_OUPUT_HANDLE(标准输出句柄)
	 *	STD_ERROR_HANDLE(标准错误句柄),
	 *  函数返回值。句柄值。
	 */
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

	wchar_t * pszText = L"我是程序员\n";
	/*
	 *BOOL WINAPI WriteConsole(
	 *	HANDLE hConsoleOutput, 控制台句柄,应该为标准输出句柄
	 *
	 *	const VOID* lpBuffer,输出的内容的指针
	 *
	 *	DOWRD nNUmberOfCharsToWrite,输出的字符的数量
	 *
	 *	DOWRD lpNumberOfCharsWritten 输出参数,用于返回实际输出的字符数
	 *
	 *	LPVOID lpReserved);保留参数,必须设置为NULL
	 */

	WriteConsoleW(hOut,pszText,wcslen(pszText),NULL,NULL);
}


走进windows编程的世界-----字符编码,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!