Windows核心編程(3)字元編碼詳解

來源:互聯網
上載者:User

標籤:MFC

一、字元編碼 詳細介紹


1.位元組(Byte)是一種計量單位,他是電腦資訊技術儲存容量的一種單位


2.字元的意義: 字元數電腦文字中使用的文字和符號,比如1,2,3,4,~,@,!,%,^等待


3.在不同編碼裡字元和位元組對應的關係不同

a.在ASCLL碼中,一個英文字母(不區分大小寫)佔一個位元組(8bit),一個漢子佔兩個位元組(16bit)

b.UTF-8編碼中,一個英文字元等於一個位元組,一個中文(含繁體)等於三個位元組

c.在Unicode編碼中,一個英文兩個位元組, 一個中文(含繁體)佔兩個位元組

d.英文符號佔一個位元組,中文符號佔兩個位元組



4.多字元集 : 各國文字編碼喲重疊的編碼(編碼衝突)導致亂碼

a.最開始,internet上只有一種字元集------ANS的ASCLL字元集,他用7bits表示一個字元,

總共表示128個字元,包括英文字母,數字,標點符號,之後進行擴充,使用8bits表示一個字元

可以表示256個字元, 再原來的7bits基礎上加入了一些特殊字元.

b.後來各國語音的加入,ASCLL已經不能滿足需求,各國都在ASCLL的基礎上制定了自己的

字元集, 這些從ANSL標準派生的字元集被習慣的稱為ANSL字元集

正式名稱MBCS(Multi-Byte Chactacter System,即多位元組字元系統),每種語言都有自己的字元集

導致各種字元集實在太多,在國際交流中非常不便, 因此提出了Unicode字元集

它固定使用16 bits(兩個位元組、一個字)來表示一個字元,共可以表示65535個字元,將世界上

所有語音常用字元都收錄其中,(Unicode標準稱為UTF-16),後來為了能使雙位元組的Unicode

能夠在現存的處理單位元組系統上正確傳輸,出現了UTF-8,使用MBCS的方式對Unicode進行編碼.

UTF-8是編碼,它屬於Unicode字元集,


5.Windows定義了一些資料類型

a.wchar_t 就是兩個位元組 帶有W的都是這個類型

b.WCHAR Unicode字元 他其實就是wchar_t 

c.PWSTR 指向Unicode字串的指標 wchar_t *

d.PCWSTR 指向一個常量的Unicode const wchar_t * 

e.對應多位元組的類型為 CHAR,LPSTR,LPCSTR

f.ASNL/Unicode通用資料類型,

TCAHR 多字元集中為char, Unicode中為wchar_t

PTSTR 多字元集中為char *, Unicode中為wchar_t *

LPCTSTR 多字元集中為const char *, Unicode中為const wchar_t *

f.帶有A就是多字元集, W就是Unicode(款字元),T就是通用的



7.Windows中多字元集和Unicode相互轉化的API

a.WideCharToMultiByte 映射一個Unicode字串到多位元組字串

b.MultiByteToWideChar 映射一個多位元組字串到Unicode字串


8.函數 使用上面的函數比較複雜  則可以使用下面的宏函數

使用之前要先宣告身份識別符 USES_CONVERSION;

A2W: 將多位元組 轉 寬位元組

USES_CONVERSIONCString str;char* AChar = "abcdefg";wchar_t* WChar = A2W(AChar); str = WChar;

W2A: 將款位元組 轉 多位元組

USES_CONVERSION;wchar_t* AChar = L"abcdefg啊";char* WChar = W2A(AChar);

T2A: T代表跟隨系統 轉 多位元組

USES_CONVERSION;  char * pChar="char to cstring";  CString cTemp=A2T(pChar);

T2W: 系統類別型 轉 款位元組

SES_CONVERSION;  CString cTemp =_T("char to cstring");  char * pChar=A2T(pChar);


9.謹慎使用上面的宏函數轉換

a.如果你在一個迴圈裡使用這個函數 可能會引起堆疊溢位

因為你查看代碼發現他函數裡面會調用alloc申請記憶體,他會在函數的棧中分配,

VC編譯器預設是2M,在一個迴圈中調用這個函數就會一直分配記憶體.


b.解決辦法最好是使用 WideCharToMultiByte  MultiByteToWideChar 

這兩個API,  把這兩個API封裝一下, 使用就很方便了.



10.使用THAR _TEXT 可以同時適應Unicode和多位元組字元集



Windows核心編程(3)字元編碼詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.