走進windows編程的世界-----字元編碼

來源:互聯網
上載者:User

標籤:字元編碼   unicode   多位元組   

1   字元編碼1.1編碼的曆史1.1.1ASCII碼

0=127 7位表示

1.1.2ASCII擴充碼

0—255 8為表示。

字碼頁:通過代碼也來切換對應的字元(數字表示)

1.1.3雙位元組字元集DBCS

使用一個或兩個位元組表示字元。


1.1.4Unicode編碼

全部使用2個位元組表示字元


記憶體 硬碟等資源佔用變大。對編碼支援度大。

字元集

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 _UNICODEint nLen = strlen(pszText);#elseint nLen = wcslen(pszText);#endif}
1.1.1Unicode的控制台列印

將Unicode 字串輸出到控制台上。參考資料:http://blog.sina.com.cn/s/blog_4e3197f20100a7v3.html

同樣,Windows控制台也是標準的UNICODE系統功能,也有xxxA,xxxW兩種對其操作的Win32 API,下面以WriteConsole為例。它也存在WriteConsoleA和WriteConsoleW兩上版本,但我們在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);}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.