- ASC编码,7位一个字符,128个,美国人创造计算机时所用。
- ASCII编码,8位一个字符,256个,前128不变,后128给其他国家,每个国家一个代码页,936是中文,437是英文。
- DBSC编码,中文专属,英文一个字节表示,中文2个字节表示,节约空间但是容易乱码。
- Unicode编码,全部连个字节,现在更主流的编码。
非Unicode下,:
Tchar = char;
_tcslen = strlen;
char* str = "hello";
prinrf("%s",str);
和C语言里面的char是一样的用法。
Unicode编码下:
Tchar = wchar_t; //WCHAR
_tcslen = wcslen;
wchar_t* str = L"hello"; //加L参数
//等效 wchar_t* str = _T("hello");
wprintf(L"%s",str);
//控制台下打印Unicode:
BOOL WriteConsole(
HANDLE hConsoleOutput, //控制台输出流的句柄
CONST VOID *lpBuffer,//输出的字符串的指针
DWORD nNumberOfCharsToWrite,//输出的字符串的长度
LPDWORD lpNumberOfCharsWritten,// 返回已输出字符的数量
LPVOID lpReserved, // 保留值
)
//字符转换
int WideCharToMultiByte(
UINT CodePage, //代码页
DWORD dwFlags, //转换方式
LPCWSTR lpWideCharStr, //需要被转换WCHAR地址
int cchWideChar, //需要被转换WCHAR的长度
LPSTR lpMultiByteStr,//用于存放转换后的结果BUFF
int cchMultiByte, //BUFF的长度
LPCSTR lpDefaultChar,//使用的缺省字符串的地址
LPBOOL lpUsedDefaultChar //缺省字符串被使用的标识
);
int MultiByteToWideChar(
UINT CodePage,// 代码页
DWORD dwFlags,// 转换方式
LPCSTR lpMultiByteStr, // 需要被转换CHAR地址
int cchMultiByte,//需要被转换CHAR的长度
LPWSTR lpWideCharStr,//用于存放转换后的结果BUFF
int cchWideChar //BUFF的长度
);
//使用方法:
//1 将要转换的字符串,传递给函数,从返回值中获取转换后字符串的长度。
//2 分配字符串空间
//3 再次调用函数,并将分配的空间传递给函数,获取结果.
//打印255个ASCII码
void CodePage(int ncodepage)
{
char a=0;
int i=0;
SetConsoleOutputCP(ncodepage);
for(i=0;i<256;i++)
{
printf("%c ",a);
a++;
}
printf("\n");
}
//打印全部的unicode编码
void printunicoude()
{
BYTE nHigh;
BYTE nLow;
HANDLE hOut = GetStdHandle( STD_OUTPUT_HANDLE );
wchar_t * pszText = L"我是程序员";
wchar_t szText[2] = { 0 };
WriteConsoleW( hOut,pszText,wcslen(pszText), NULL, NULL );
for(nHigh=0x48; nHigh<0x9F; nHigh++ )
{
for(nLow=0; nLow<0xFF; nLow++ )
{
szText[0] = MAKEWORD( nLow, nHigh );
WriteConsoleW( hOut,szText,wcslen(szText), NULL, NULL );
}
}
}